Skip to content

_sre.compile overwrites TypeError with OverflowError #110590

Description

@sobolevn

Bug report

Reproduction:

>>> import _sre
>>> _sre.compile('', 0, ['abc'], 0, {}, ())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: regular expression code size limit exceeded

It should be:

>>> import _sre
>>> _sre.compile('', 0, ['abc'], 0, {}, ())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required

Because the third arg is code: object(subclass_of='&PyList_Type'), it is assumed to be integers inside.

Problematic lines:

cpython/Modules/_sre/sre.c

Lines 1510 to 1515 in def7ea5

unsigned long value = PyLong_AsUnsignedLong(o);
self->code[i] = (SRE_CODE) value;
if ((unsigned long) self->code[i] != value) {
PyErr_SetString(PyExc_OverflowError,
"regular expression code size limit exceeded");
break;

They do not check for PyLong_AsUnsignedLong errors.
I have a PR ready :)

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions