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.
This commit is contained in:
Victor Stinner 2013-07-12 01:33:59 +02:00
parent 4202456cd4
commit 3bd6abd129
1 changed files with 15 additions and 4 deletions

View File

@ -809,8 +809,13 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
return 0;
}
strn = (char *)PyObject_MALLOC(len + 1);
if (strn != NULL)
(void) memcpy(strn, temp_str, len + 1);
if (strn == NULL) {
Py_DECREF(temp);
Py_XDECREF(elem);
PyErr_NoMemory();
return 0;
}
(void) memcpy(strn, temp_str, len + 1);
Py_DECREF(temp);
}
else if (!ISNONTERMINAL(type)) {
@ -906,8 +911,14 @@ build_node_tree(PyObject *tuple)
return NULL;
}
res->n_str = (char *)PyObject_MALLOC(len + 1);
if (res->n_str != NULL && temp != NULL)
(void) memcpy(res->n_str, temp, len + 1);
if (res->n_str == NULL) {
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(tuple);
}