https://github.com/python/cpython/commit/fa44efa0ef1972ac1e2f66996303154be11f605e
commit: fa44efa0ef1972ac1e2f66996303154be11f605e
branch: main
author: AZero13 <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-01-20T11:50:51+02:00
summary:
gh-144023: Prevent follow_symlinks from being allowed with an fd of 0
(GH-144022)
The check was (fd > 0), should be (fd >= 0).
files:
A Misc/NEWS.d/next/Library/2026-01-19-00-57-40.gh-issue-144023.29XUcp.rst
M Lib/test/test_os/test_posix.py
M Modules/posixmodule.c
diff --git a/Lib/test/test_os/test_posix.py b/Lib/test/test_os/test_posix.py
index 37da293a441e46..995c48bdbbffd6 100644
--- a/Lib/test/test_os/test_posix.py
+++ b/Lib/test/test_os/test_posix.py
@@ -668,6 +668,18 @@ def test_fstat(self):
finally:
fp.close()
+ @unittest.skipUnless(hasattr(posix, 'stat'),
+ 'test needs posix.stat()')
+ @unittest.skipUnless(os.stat in os.supports_follow_symlinks,
+ 'test needs follow_symlinks support in os.stat()')
+ def test_stat_fd_zero_follow_symlinks(self):
+ with self.assertRaisesRegex(ValueError,
+ 'cannot use fd and follow_symlinks together'):
+ posix.stat(0, follow_symlinks=False)
+ with self.assertRaisesRegex(ValueError,
+ 'cannot use fd and follow_symlinks together'):
+ posix.stat(1, follow_symlinks=False)
+
def check_statlike_path(self, func):
self.assertTrue(func(os_helper.TESTFN))
self.assertTrue(func(os.fsencode(os_helper.TESTFN)))
diff --git
a/Misc/NEWS.d/next/Library/2026-01-19-00-57-40.gh-issue-144023.29XUcp.rst
b/Misc/NEWS.d/next/Library/2026-01-19-00-57-40.gh-issue-144023.29XUcp.rst
new file mode 100644
index 00000000000000..0d06506e1ec106
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-01-19-00-57-40.gh-issue-144023.29XUcp.rst
@@ -0,0 +1,2 @@
+Fixed validation of file descriptor 0 in posix functions when used with
+follow_symlinks parameter.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 49214d57a2e362..ef90ac5de09c65 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1637,7 +1637,7 @@ static int
fd_and_follow_symlinks_invalid(const char *function_name, int fd,
int follow_symlinks)
{
- if ((fd > 0) && (!follow_symlinks)) {
+ if ((fd >= 0) && (!follow_symlinks)) {
PyErr_Format(PyExc_ValueError,
"%s: cannot use fd and follow_symlinks together",
function_name);
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]