From 406d7aaee76a3c0942b5b84a8c689afc2a06f960 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Mon, 4 May 2009 05:28:39 +0000 Subject: [PATCH] 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 e372a623609..6b7a94d320a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -266,6 +266,8 @@ Core and Builtins 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 7a96300e250..511b3854e38 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;