Skip to content

Commit a43cb6e

Browse files
committed
7. allocate repeats_array for SRE_STATE
1 parent db7e88b commit a43cb6e

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

Modules/_sre.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,12 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
427427
state->lastmark = -1;
428428
state->lastindex = -1;
429429

430+
state->repeats_array = PyMem_New(SRE_REPEAT, pattern->repeat_count);
431+
if (!state->repeats_array) {
432+
PyErr_NoMemory();
433+
goto err;
434+
}
435+
430436
state->buffer.buf = NULL;
431437
ptr = getstring(string, &length, &isbytes, &charsize, &state->buffer);
432438
if (!ptr)
@@ -476,6 +482,9 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
476482
safely casted to `void*`, see bpo-39943 for details. */
477483
PyMem_Free((void*) state->mark);
478484
state->mark = NULL;
485+
PyMem_Free(state->repeats_array);
486+
state->repeats_array = NULL;
487+
479488
if (state->buffer.buf)
480489
PyBuffer_Release(&state->buffer);
481490
return NULL;
@@ -491,6 +500,8 @@ state_fini(SRE_STATE* state)
491500
/* See above PyMem_Del for why we explicitly cast here. */
492501
PyMem_Free((void*) state->mark);
493502
state->mark = NULL;
503+
PyMem_Free(state->repeats_array);
504+
state->repeats_array = NULL;
494505
}
495506

496507
/* calculate offset from start of string */

0 commit comments

Comments
 (0)