From: Steve Dower Date: Thu, 14 Dec 2023 15:16:39 +0000 (+0000) Subject: gh-86179: Avoid making case-only changes when calculating realpath() during initializ... X-Git-Tag: v3.13.0a3~380 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fd81afc624402816e3455fd8e932ac7702e4d988;p=thirdparty%2FPython%2Fcpython.git gh-86179: Avoid making case-only changes when calculating realpath() during initialization (GH-113077) --- diff --git a/Modules/getpath.c b/Modules/getpath.c index 422056b1fb6d..afa9273ebc59 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -506,12 +506,17 @@ done: HANDLE hFile; wchar_t resolved[MAXPATHLEN+1]; int len = 0, err; + Py_ssize_t pathlen; PyObject *result; - wchar_t *path = PyUnicode_AsWideCharString(pathobj, NULL); + wchar_t *path = PyUnicode_AsWideCharString(pathobj, &pathlen); if (!path) { return NULL; } + if (wcslen(path) != pathlen) { + PyErr_SetString(PyExc_ValueError, "path contains embedded nulls"); + return NULL; + } Py_BEGIN_ALLOW_THREADS hFile = CreateFileW(path, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); @@ -535,7 +540,11 @@ done: len -= 4; } } - result = PyUnicode_FromWideChar(p, len); + if (CompareStringOrdinal(path, (int)pathlen, p, len, TRUE) == CSTR_EQUAL) { + result = Py_NewRef(pathobj); + } else { + result = PyUnicode_FromWideChar(p, len); + } } else { result = Py_NewRef(pathobj); }