From 982e9fea0a9c6026b4d176ce136676ab1893e4b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Mon, 24 Jul 2006 12:54:17 +0000 Subject: Bug #1524310: Properly report errors from FindNextFile in os.listdir. Will backport to 2.4. --- Misc/NEWS | 2 ++ Modules/posixmodule.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/Misc/NEWS b/Misc/NEWS index eee36c6..e721414 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.5 release candidate 1? Core and builtins ----------------- +- Bug #1524310: Properly report errors from FindNextFile in os.listdir. + - Patch #1232023: Stop including current directory in search path on Windows. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e118237..d968b6c 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1862,6 +1862,15 @@ posix_listdir(PyObject *self, PyObject *args) Py_BEGIN_ALLOW_THREADS result = FindNextFileW(hFindFile, &wFileData); Py_END_ALLOW_THREADS + /* FindNextFile sets error to ERROR_NO_MORE_FILES if + it got to the end of the directory. */ + if (!result && GetLastError() != ERROR_NO_MORE_FILES) { + Py_DECREF(d); + win32_error_unicode("FindNextFileW", wnamebuf); + FindClose(hFindFile); + free(wnamebuf); + return NULL; + } } while (result == TRUE); if (FindClose(hFindFile) == FALSE) { @@ -1921,6 +1930,14 @@ posix_listdir(PyObject *self, PyObject *args) Py_BEGIN_ALLOW_THREADS result = FindNextFile(hFindFile, &FileData); Py_END_ALLOW_THREADS + /* FindNextFile sets error to ERROR_NO_MORE_FILES if + it got to the end of the directory. */ + if (!result && GetLastError() != ERROR_NO_MORE_FILES) { + Py_DECREF(d); + win32_error("FindNextFile", namebuf); + FindClose(hFindFile); + return NULL; + } } while (result == TRUE); if (FindClose(hFindFile) == FALSE) { -- cgit v0.12