gh-110590: Fix a bug where _sre.compile would overwrite exceptions (#110591)

TypeError would be overwritten by OverflowError
if 'code' param contained non-ints.
This commit is contained in:
Nikita Sobolev 2023-10-10 13:15:12 +03:00 committed by GitHub
parent 0362cbf908
commit 344d3a222a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 0 deletions

View File

@ -2735,6 +2735,9 @@ class ImplementationTest(unittest.TestCase):
_sre.compile("abc", 0, [long_overflow], 0, {}, ())
with self.assertRaises(TypeError):
_sre.compile({}, 0, [], 0, [], [])
# gh-110590: `TypeError` was overwritten with `OverflowError`:
with self.assertRaises(TypeError):
_sre.compile('', 0, ['abc'], 0, {}, ())
@cpython_only
def test_repeat_minmax_overflow_maxrepeat(self):

View File

@ -0,0 +1,3 @@
Fix a bug in :meth:`!_sre.compile` where :exc:`TypeError`
would be overwritten by :exc:`OverflowError` when
the *code* argument was a list of non-ints.

View File

@ -1508,6 +1508,9 @@ _sre_compile_impl(PyObject *module, PyObject *pattern, int flags,
for (i = 0; i < n; i++) {
PyObject *o = PyList_GET_ITEM(code, i);
unsigned long value = PyLong_AsUnsignedLong(o);
if (value == (unsigned long)-1 && PyErr_Occurred()) {
break;
}
self->code[i] = (SRE_CODE) value;
if ((unsigned long) self->code[i] != value) {
PyErr_SetString(PyExc_OverflowError,