gh-86179: Avoid making case-only changes when calculating realpath() during initialization (GH-113077)

This commit is contained in:
Steve Dower 2023-12-14 15:16:39 +00:00 committed by GitHub
parent 6873555955
commit fd81afc624
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 2 deletions

View File

@ -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);
}