From: Martin v. Löwis Date: Mon, 24 Jul 2006 12:54:17 +0000 (+0000) Subject: Bug #1524310: Properly report errors from FindNextFile in os.listdir. X-Git-Tag: v2.5b3~182 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=982e9fea0a9c6026b4d176ce136676ab1893e4b2;p=thirdparty%2FPython%2Fcpython.git Bug #1524310: Properly report errors from FindNextFile in os.listdir. Will backport to 2.4. --- diff --git a/Misc/NEWS b/Misc/NEWS index eee36c606d80..e721414604eb 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 e1182378eebe..d968b6c4cd4d 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) {