mirror of https://github.com/python/cpython
bpo-38822: Fixed os.stat failing on inaccessible directories. (GH-25527)
It would just fail if the path was inaccessible and had a trailing slash. It should fall back to the parent directory's metadata.
This commit is contained in:
parent
2a3f4899c6
commit
fe63a401a9
|
@ -0,0 +1,3 @@
|
||||||
|
Fixed :func:`os.stat` failing on inaccessible directories with a trailing
|
||||||
|
slash, rather than falling back to the parent directory's metadata. This
|
||||||
|
implicitly affected :func:`os.path.exists` and :func:`os.path.isdir`.
|
|
@ -1851,9 +1851,28 @@ attributes_from_dir(LPCWSTR pszFile, BY_HANDLE_FILE_INFORMATION *info, ULONG *re
|
||||||
{
|
{
|
||||||
HANDLE hFindFile;
|
HANDLE hFindFile;
|
||||||
WIN32_FIND_DATAW FileData;
|
WIN32_FIND_DATAW FileData;
|
||||||
hFindFile = FindFirstFileW(pszFile, &FileData);
|
LPCWSTR filename = pszFile;
|
||||||
if (hFindFile == INVALID_HANDLE_VALUE)
|
size_t n = wcslen(pszFile);
|
||||||
|
if (n && (pszFile[n - 1] == L'\\' || pszFile[n - 1] == L'/')) {
|
||||||
|
// cannot use PyMem_Malloc here because we do not hold the GIL
|
||||||
|
filename = (LPCWSTR)malloc((n + 1) * sizeof(filename[0]));
|
||||||
|
wcsncpy_s((LPWSTR)filename, n + 1, pszFile, n);
|
||||||
|
while (--n > 0 && (filename[n] == L'\\' || filename[n] == L'/')) {
|
||||||
|
((LPWSTR)filename)[n] = L'\0';
|
||||||
|
}
|
||||||
|
if (!n || filename[n] == L':') {
|
||||||
|
// Nothing left te query
|
||||||
|
free((void *)filename);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hFindFile = FindFirstFileW(filename, &FileData);
|
||||||
|
if (pszFile != filename) {
|
||||||
|
free((void *)filename);
|
||||||
|
}
|
||||||
|
if (hFindFile == INVALID_HANDLE_VALUE) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
FindClose(hFindFile);
|
FindClose(hFindFile);
|
||||||
find_data_to_file_info(&FileData, info, reparse_tag);
|
find_data_to_file_info(&FileData, info, reparse_tag);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in New Issue