Skip to content
Prev Previous commit
Next Next commit
7. allocate repeats_array for SRE_STATE
  • Loading branch information
wjssz committed Apr 3, 2022
commit a43cb6e2d5125a87753467d52180585eb968f93b
11 changes: 11 additions & 0 deletions Modules/_sre.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,12 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
state->lastmark = -1;
state->lastindex = -1;

state->repeats_array = PyMem_New(SRE_REPEAT, pattern->repeat_count);
if (!state->repeats_array) {
PyErr_NoMemory();
goto err;
}

state->buffer.buf = NULL;
ptr = getstring(string, &length, &isbytes, &charsize, &state->buffer);
if (!ptr)
Expand Down Expand Up @@ -476,6 +482,9 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
safely casted to `void*`, see bpo-39943 for details. */
PyMem_Free((void*) state->mark);
state->mark = NULL;
PyMem_Free(state->repeats_array);
state->repeats_array = NULL;

if (state->buffer.buf)
PyBuffer_Release(&state->buffer);
return NULL;
Expand All @@ -491,6 +500,8 @@ state_fini(SRE_STATE* state)
/* See above PyMem_Del for why we explicitly cast here. */
PyMem_Free((void*) state->mark);
state->mark = NULL;
PyMem_Free(state->repeats_array);
state->repeats_array = NULL;
}

/* calculate offset from start of string */
Expand Down