diff options
author | Stefan Krah <skrah@bytereef.org> | 2012-08-21 06:25:41 (GMT) |
---|---|---|
committer | Stefan Krah <skrah@bytereef.org> | 2012-08-21 06:25:41 (GMT) |
commit | 5b27c53e36a909b451c1a87522fc41a7b16aa9e3 (patch) | |
tree | 42122c71b19ef08c1b075dd67b2dd7fb1f8fcd25 | |
parent | 139cd4352f38e3e1d6b1f86033dc86ec61620e72 (diff) | |
parent | 7cacd2eb92dad7e63a0249974617de33f4c4a0e0 (diff) | |
download | cpython-5b27c53e36a909b451c1a87522fc41a7b16aa9e3.zip cpython-5b27c53e36a909b451c1a87522fc41a7b16aa9e3.tar.gz cpython-5b27c53e36a909b451c1a87522fc41a7b16aa9e3.tar.bz2 |
Merge 3.2.
-rw-r--r-- | Lib/test/test_capi.py | 8 | ||||
-rw-r--r-- | Objects/abstract.c | 7 |
2 files changed, 15 insertions, 0 deletions
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py index 34dbe58..d3c4a04 100644 --- a/Lib/test/test_capi.py +++ b/Lib/test/test_capi.py @@ -90,6 +90,14 @@ class CAPITest(unittest.TestCase): return 1 self.assertRaises(TypeError, _posixsubprocess.fork_exec, 1,Z(),3,[1, 2],5,6,7,8,9,10,11,12,13,14,15,16,17) + # Issue #15736: overflow in _PySequence_BytesToCharpArray() + class Z(object): + def __len__(self): + return sys.maxsize + def __getitem__(self, i): + return b'x' + self.assertRaises(MemoryError, _posixsubprocess.fork_exec, + 1,Z(),3,[1, 2],5,6,7,8,9,10,11,12,13,14,15,16,17) @unittest.skipUnless(_posixsubprocess, '_posixsubprocess required for this test.') def test_subprocess_fork_exec(self): diff --git a/Objects/abstract.c b/Objects/abstract.c index 5ac4ac9..ed5e196 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2710,6 +2710,13 @@ _PySequence_BytesToCharpArray(PyObject* self) if (argc == -1) return NULL; + assert(argc >= 0); + + if ((size_t)argc > (PY_SSIZE_T_MAX-sizeof(char *)) / sizeof(char *)) { + PyErr_NoMemory(); + return NULL; + } + array = malloc((argc + 1) * sizeof(char *)); if (array == NULL) { PyErr_NoMemory(); |