From: Victor Stinner Date: Thu, 11 Jul 2013 23:33:59 +0000 (+0200) Subject: Issue #18408: Fix parser.sequence2st() and parser.tuple2st(): raise MemoryError X-Git-Tag: v3.4.0a1~237 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3bd6abd1294263f88ee4c0dbff3d1dfb618ec7ab;p=python 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. --- diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index e86fe4d2eb..d2693e3956 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -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); }