From bbb9be72110c7f4a8756eb7abbe8385fafddea1c Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Mon, 4 May 2009 05:56:46 +0000 Subject: Merged revisions 72273 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r72273 | hirokazu.yamamoto | 2009-05-04 14:28:39 +0900 | 1 line Issue #5913: os.listdir() should fail for empty path on windows. ........ --- Misc/NEWS | 2 ++ Modules/posixmodule.c | 13 +++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index fccafcc..befef21 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -109,6 +109,8 @@ Installation Library ------- +- Issue #5913: os.listdir() should fail for empty path on windows. + - Issue #5084: unpickling now interns the attribute names of pickled objects, saving memory and avoiding growth in size of subsequent pickles. Proposal and original patch by Jake McGuire. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 7b8c057..0575be2 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2183,7 +2183,6 @@ posix_listdir(PyObject *self, PyObject *args) if (PyArg_ParseTuple(args, "U:listdir", &po)) { WIN32_FIND_DATAW wFileData; Py_UNICODE *wnamebuf; - Py_UNICODE wch; /* Overallocate for \\*.*\0 */ len = PyUnicode_GET_SIZE(po); wnamebuf = malloc((len + 5) * sizeof(wchar_t)); @@ -2192,10 +2191,12 @@ posix_listdir(PyObject *self, PyObject *args) return NULL; } wcscpy(wnamebuf, PyUnicode_AS_UNICODE(po)); - wch = len > 0 ? wnamebuf[len-1] : '\0'; - if (wch != L'/' && wch != L'\\' && wch != L':') - wnamebuf[len++] = L'\\'; - wcscpy(wnamebuf + len, L"*.*"); + if (len > 0) { + Py_UNICODE wch = wnamebuf[len-1]; + if (wch != L'/' && wch != L'\\' && wch != L':') + wnamebuf[len++] = L'\\'; + wcscpy(wnamebuf + len, L"*.*"); + } if ((d = PyList_New(0)) == NULL) { free(wnamebuf); return NULL; @@ -2266,8 +2267,8 @@ posix_listdir(PyObject *self, PyObject *args) char ch = namebuf[len-1]; if (ch != SEP && ch != ALTSEP && ch != ':') namebuf[len++] = '/'; + strcpy(namebuf + len, "*.*"); } - strcpy(namebuf + len, "*.*"); if ((d = PyList_New(0)) == NULL) return NULL; -- cgit v0.12