[Python-checkins] cpython: Issue #18408: Fix parser.sequence2st() and parser.tuple2st(): raise MemoryError

victor.stinner python-checkins at python.org
Fri Jul 12 01:42:53 CEST 2013


http://hg.python.org/cpython/rev/89c6495d1ff2
changeset:   84578:89c6495d1ff2
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Fri Jul 12 01:33:59 2013 +0200
summary:
  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.

files:
  Modules/parsermodule.c |  19 +++++++++++++++----
  1 files changed, 15 insertions(+), 4 deletions(-)


diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -809,8 +809,13 @@
                 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 @@
                     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);
             }

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list