From 3bd6abd1294263f88ee4c0dbff3d1dfb618ec7ab Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 12 Jul 2013 01:33:59 +0200 Subject: [PATCH] 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. --- Modules/parsermodule.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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); } -- 2.40.0