Mailing List Archive

GH-114847: Raise FileNotFoundError when getcwd() returns '(unreachable)' (#117481)
https://github.com/python/cpython/commit/345194de8cb3ceaa40d19353d30ba6e23b6e6edb
commit: 345194de8cb3ceaa40d19353d30ba6e23b6e6edb
branch: main
author: Barney Gale <barney.gale@gmail.com>
committer: barneygale <barney.gale@gmail.com>
date: 2024-04-03T16:39:40+01:00
summary:

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>

files:
A Misc/NEWS.d/next/Library/2024-04-02-20-30-12.gh-issue-114848.YX4pEc.rst
M Modules/posixmodule.c

diff --git a/Misc/NEWS.d/next/Library/2024-04-02-20-30-12.gh-issue-114848.YX4pEc.rst b/Misc/NEWS.d/next/Library/2024-04-02-20-30-12.gh-issue-114848.YX4pEc.rst
new file mode 100644
index 00000000000000..30b1a50976f52d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-04-02-20-30-12.gh-issue-114848.YX4pEc.rst
@@ -0,0 +1,2 @@
+Raise :exc:`FileNotFoundError` when ``getcwd()`` returns '(unreachable)',
+which can happen on Linux >= 2.6.36 with glibc < 2.27.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index a4b635ef5bf629..fcac3dbe3553ef 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -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;

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-leave@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: list-python-checkins@lists.gossamer-threads.com