if (_n == _children_capacity) {
_children_capacity *= 2;
void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
if (!_new_children) {
p->error_indicator = 1;
PyErr_NoMemory();
p->level--;
return NULL;
}
_children = _new_children;
}
If PyMem_Realloc fails, the original object will be kept untouched. Thus returning NULL without free'ing _children will cause a memory leak.
Bug report
In Parse/parse.c, function _loop0_1_rule (line 23809), object _children
if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); if (!_new_children) { p->error_indicator = 1; PyErr_NoMemory(); p->level--; return NULL; } _children = _new_children; }If PyMem_Realloc fails, the original object will be kept untouched. Thus returning NULL without free'ing _children will cause a memory leak.
Your environment
Python 3.12
Linked PRs