Skip to content

_sre.compile overwrites TypeError with OverflowError#110590

@sobolevn

Description

@sobolevn

Bug report

Reproduction:

>>>import_sre>>>_sre.compile('', 0, ['abc'], 0,{}, ()) Traceback (mostrecentcalllast): File"<stdin>", line1, in<module>OverflowError: regularexpressioncodesizelimitexceeded

It should be:

>>>import_sre>>>_sre.compile('', 0, ['abc'], 0,{}, ()) Traceback (mostrecentcalllast): File"<stdin>", line1, in<module>TypeError: anintegerisrequired

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 longvalue=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

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions