From 8c8bed0bd5a863703cda3ad1c8cf7940557294e1 Mon Sep 17 00:00:00 2001 From: Cody Maloney Date: Wed, 21 May 2025 10:45:00 -0400 Subject: [PATCH] gh-71253: Match _io exception in _pyio (gh-133985) Test was only testing _io, expanded to cover _pyio. (cherry picked from commit 06eaf4055c1d7359e129efb65b94f34d2ec51a57) Co-authored-by: Cody Maloney Co-authored-by: Peter Bierma --- Lib/_pyio.py | 3 ++- Lib/test/test_io.py | 4 ++-- .../Library/2025-05-13-18-21-59.gh-issue-71253.-3Sf_K.rst | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2025-05-13-18-21-59.gh-issue-71253.-3Sf_K.rst diff --git a/Lib/_pyio.py b/Lib/_pyio.py index a870de5b532542..f79674fb7a9f5e 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -1563,7 +1563,8 @@ def __init__(self, file, mode='r', closefd=True, opener=None): if not isinstance(fd, int): raise TypeError('expected integer from opener') if fd < 0: - raise OSError('Negative file descriptor') + # bpo-27066: Raise a ValueError for bad value. + raise ValueError(f'opener returned {fd}') owned_fd = fd if not noinherit_flag: os.set_inheritable(fd, False) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 90680c6d47ab41..4625e3a01faa7b 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -918,7 +918,7 @@ def test_bad_opener_negative_1(self): def badopener(fname, flags): return -1 with self.assertRaises(ValueError) as cm: - open('non-existent', 'r', opener=badopener) + self.open('non-existent', 'r', opener=badopener) self.assertEqual(str(cm.exception), 'opener returned -1') def test_bad_opener_other_negative(self): @@ -926,7 +926,7 @@ def test_bad_opener_other_negative(self): def badopener(fname, flags): return -2 with self.assertRaises(ValueError) as cm: - open('non-existent', 'r', opener=badopener) + self.open('non-existent', 'r', opener=badopener) self.assertEqual(str(cm.exception), 'opener returned -2') def test_opener_invalid_fd(self): diff --git a/Misc/NEWS.d/next/Library/2025-05-13-18-21-59.gh-issue-71253.-3Sf_K.rst b/Misc/NEWS.d/next/Library/2025-05-13-18-21-59.gh-issue-71253.-3Sf_K.rst new file mode 100644 index 00000000000000..714d707f488709 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-13-18-21-59.gh-issue-71253.-3Sf_K.rst @@ -0,0 +1,3 @@ +Raise :exc:`ValueError` in :func:`open` if *opener* returns a negative +file-descriptor in the Python implementation of :mod:`io` to match the +C implementation.