Merged revisions 72273 via svnmerge from
authorHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Mon, 4 May 2009 05:56:46 +0000 (05:56 +0000)
committerHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Mon, 4 May 2009 05:56:46 +0000 (05:56 +0000)
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
Modules/posixmodule.c

index fccafcc0a937019c59038d537af57364cf34860b..befef2199962345a5e2db9604527ac06f958fb69 100644 (file)
--- 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.
index 7b8c0574199375c92e2e0456b693111733f1f6ec..0575be23bba1e5afb45bad6b635f10891103551a 100644 (file)
@@ -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;