Commit dcb8a340 authored by Victor Stinner's avatar Victor Stinner

Issue #18408: Fix parser.sequence2st() and parser.tuple2st(): raise MemoryError

on memory allocation failure

Instead of ignoring the memory allocation failure and create invalid objects.
parent 8620c37f
...@@ -809,8 +809,13 @@ build_node_children(PyObject *tuple, node *root, int *line_num) ...@@ -809,8 +809,13 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
return 0; return 0;
} }
strn = (char *)PyObject_MALLOC(len + 1); strn = (char *)PyObject_MALLOC(len + 1);
if (strn != NULL) if (strn == NULL) {
(void) memcpy(strn, temp_str, len + 1); Py_DECREF(temp);
Py_XDECREF(elem);
PyErr_NoMemory();
return 0;
}
(void) memcpy(strn, temp_str, len + 1);
Py_DECREF(temp); Py_DECREF(temp);
} }
else if (!ISNONTERMINAL(type)) { else if (!ISNONTERMINAL(type)) {
...@@ -906,8 +911,14 @@ build_node_tree(PyObject *tuple) ...@@ -906,8 +911,14 @@ build_node_tree(PyObject *tuple)
return NULL; return NULL;
} }
res->n_str = (char *)PyObject_MALLOC(len + 1); res->n_str = (char *)PyObject_MALLOC(len + 1);
if (res->n_str != NULL && temp != NULL) if (res->n_str == NULL) {
(void) memcpy(res->n_str, temp, len + 1); Py_DECREF(res);
Py_DECREF(encoding);
Py_DECREF(tuple);
PyErr_NoMemory();
return NULL;
}
(void) memcpy(res->n_str, temp, len + 1);
Py_DECREF(encoding); Py_DECREF(encoding);
Py_DECREF(tuple); Py_DECREF(tuple);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment