mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-134744: Fix fcntl error handling (#134748)
Fix also reference leak on buffer overflow.
(cherry picked from commit 9300a596d3
)
This commit is contained in:
parent
6493395f4b
commit
8a6a6f39c8
2 changed files with 20 additions and 2 deletions
|
@ -11,7 +11,7 @@ from test.support import (
|
|||
cpython_only, get_pagesize, is_apple, requires_subprocess, verbose
|
||||
)
|
||||
from test.support.import_helper import import_module
|
||||
from test.support.os_helper import TESTFN, unlink
|
||||
from test.support.os_helper import TESTFN, unlink, make_bad_fd
|
||||
|
||||
|
||||
# Skip test if no fcntl module.
|
||||
|
@ -228,6 +228,15 @@ class TestFcntl(unittest.TestCase):
|
|||
os.close(test_pipe_r)
|
||||
os.close(test_pipe_w)
|
||||
|
||||
@unittest.skipUnless(hasattr(fcntl, 'F_DUPFD'), 'need fcntl.F_DUPFD')
|
||||
def test_bad_fd(self):
|
||||
# gh-134744: Test error handling
|
||||
fd = make_bad_fd()
|
||||
with self.assertRaises(OSError):
|
||||
fcntl.fcntl(fd, fcntl.F_DUPFD, 0)
|
||||
with self.assertRaises(OSError):
|
||||
fcntl.fcntl(fd, fcntl.F_DUPFD, b'\0' * 1024)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
@ -5,7 +5,7 @@ import sys
|
|||
import threading
|
||||
import unittest
|
||||
from test import support
|
||||
from test.support import threading_helper
|
||||
from test.support import os_helper, threading_helper
|
||||
from test.support.import_helper import import_module
|
||||
fcntl = import_module('fcntl')
|
||||
termios = import_module('termios')
|
||||
|
@ -202,6 +202,15 @@ class IoctlTestsPty(unittest.TestCase):
|
|||
new_winsz = struct.unpack("HHHH", result)
|
||||
self.assertEqual(new_winsz[:2], (20, 40))
|
||||
|
||||
@unittest.skipUnless(hasattr(fcntl, 'FICLONE'), 'need fcntl.FICLONE')
|
||||
def test_bad_fd(self):
|
||||
# gh-134744: Test error handling
|
||||
fd = os_helper.make_bad_fd()
|
||||
with self.assertRaises(OSError):
|
||||
fcntl.ioctl(fd, fcntl.FICLONE, fd)
|
||||
with self.assertRaises(OSError):
|
||||
fcntl.ioctl(fd, fcntl.FICLONE, b'\0' * 1024)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue