https://github.com/python/cpython/commit/a88d1b8dab4cbd3180dd7f1acb44d627db90323b
commit: a88d1b8dab4cbd3180dd7f1acb44d627db90323b
branch: main
author: AZero13 <[email protected]>
committer: bitdancer <[email protected]>
date: 2025-12-22T12:48:11-05:00
summary:

gh-143010: Prevent a TOCTOU issue by only calling open once (#143011)

* gh-143010: Prevent a TOCTOU issue by gh-143010: Prevent a TOCTOU issue by 
only calling open once

RDM: per  AZero13's research the 'x' option did not exist when this code was 
written,  This
modernization can thus drop the fd trick in _create_carefully and just use open 
with 'x' to achieve the same goal more securely.

Co-authored-by: sobolevn <[email protected]>

files:
A Misc/NEWS.d/next/Library/2025-12-20-01-49-02.gh-issue-143010._-SWX0.rst
M Lib/mailbox.py

diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index 4a44642765cc9a..65923e9c5de324 100644
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -2181,11 +2181,7 @@ def _unlock_file(f):
 
 def _create_carefully(path):
     """Create a file if it doesn't exist and open for reading and writing."""
-    fd = os.open(path, os.O_CREAT | os.O_EXCL | os.O_RDWR, 0o666)
-    try:
-        return open(path, 'rb+')
-    finally:
-        os.close(fd)
+    return open(path, 'xb+')
 
 def _create_temporary(path):
     """Create a temp file based on path and open for reading and writing."""
diff --git 
a/Misc/NEWS.d/next/Library/2025-12-20-01-49-02.gh-issue-143010._-SWX0.rst 
b/Misc/NEWS.d/next/Library/2025-12-20-01-49-02.gh-issue-143010._-SWX0.rst
new file mode 100644
index 00000000000000..4914d0b7be727b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-12-20-01-49-02.gh-issue-143010._-SWX0.rst
@@ -0,0 +1 @@
+Fixed a bug in :mod:`mailbox` where the precise timing of an external event 
could result in the library opening an existing file instead of a file it 
expected to create.

_______________________________________________
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]

Reply via email to