mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #15989: Fix several occurrences of integer overflow
when result of PyLong_AsLong() narrowed to int without checks. This is a backport of changesets 13e2e44db99d and 525407d89277.
This commit is contained in:
parent
ff12fae80e
commit
441d30fac7
16 changed files with 129 additions and 20 deletions
|
@ -6,6 +6,7 @@ OS/2+EMX doesn't support the file locking operations.
|
|||
import os
|
||||
import struct
|
||||
import sys
|
||||
import _testcapi
|
||||
import unittest
|
||||
from test.support import verbose, TESTFN, unlink, run_unittest, import_module
|
||||
|
||||
|
@ -76,6 +77,26 @@ class TestFcntl(unittest.TestCase):
|
|||
rv = fcntl.fcntl(self.f, fcntl.F_SETLKW, lockdata)
|
||||
self.f.close()
|
||||
|
||||
def test_fcntl_bad_file(self):
|
||||
class F:
|
||||
def __init__(self, fn):
|
||||
self.fn = fn
|
||||
def fileno(self):
|
||||
return self.fn
|
||||
self.assertRaises(ValueError, fcntl.fcntl, -1, fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
self.assertRaises(ValueError, fcntl.fcntl, F(-1), fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
self.assertRaises(TypeError, fcntl.fcntl, 'spam', fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
self.assertRaises(TypeError, fcntl.fcntl, F('spam'), fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
# Issue 15989
|
||||
self.assertRaises(OverflowError, fcntl.fcntl, _testcapi.INT_MAX + 1,
|
||||
fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
self.assertRaises(OverflowError, fcntl.fcntl, F(_testcapi.INT_MAX + 1),
|
||||
fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
self.assertRaises(OverflowError, fcntl.fcntl, _testcapi.INT_MIN - 1,
|
||||
fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
self.assertRaises(OverflowError, fcntl.fcntl, F(_testcapi.INT_MIN - 1),
|
||||
fcntl.F_SETFL, os.O_NONBLOCK)
|
||||
|
||||
def test_fcntl_64_bit(self):
|
||||
# Issue #1309352: fcntl shouldn't fail when the third arg fits in a
|
||||
# C 'long' but not in a C 'int'.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue