GH-114847: Raise FileNotFoundError when getcwd() returns '(unreachable)' (#117481)

On Linux >= 2.6.36 with glibc < 2.27, `getcwd()` can return a relative
pathname starting with '(unreachable)'. We detect this and fail with
ENOENT, matching new glibc behaviour.

Co-authored-by: Petr Viktorin <encukou@gmail.com>
This commit is contained in:
Barney Gale 2024-04-03 16:39:40 +01:00 committed by GitHub
parent 03f7aaf953
commit 345194de8c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 0 deletions

View File

@ -0,0 +1,2 @@
Raise :exc:`FileNotFoundError` when ``getcwd()`` returns '(unreachable)',
which can happen on Linux >= 2.6.36 with glibc < 2.27.

View File

@ -4106,6 +4106,20 @@ posix_getcwd(int use_bytes)
else {
obj = PyUnicode_DecodeFSDefault(buf);
}
#ifdef __linux__
if (buf[0] != '/') {
/*
* On Linux >= 2.6.36 with glibc < 2.27, getcwd() can return a
* relative pathname starting with '(unreachable)'. We detect this
* and fail with ENOENT, matching newer glibc behaviour.
*/
errno = ENOENT;
path_object_error(obj);
PyMem_RawFree(buf);
return NULL;
}
#endif
assert(buf[0] == '/');
PyMem_RawFree(buf);
return obj;