[Python-checkins] cpython: Issue #18408: Fix pyexpat.ParserCreate()

victor.stinner python-checkins at python.org
Tue Jul 16 00:12:46 CEST 2013


http://hg.python.org/cpython/rev/735e3c43e61c
changeset:   84639:735e3c43e61c
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Mon Jul 15 17:15:57 2013 +0200
summary:
  Issue #18408: Fix pyexpat.ParserCreate()

Check if XML_ParserCreate_MM() failed (ex: MemoryError) before using
self->itself.

files:
  Modules/pyexpat.c |  19 ++++++++++---------
  1 files changed, 10 insertions(+), 9 deletions(-)


diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -1180,9 +1180,19 @@
     self->in_callback = 0;
     self->ns_prefixes = 0;
     self->handlers = NULL;
+    self->intern = intern;
+    Py_XINCREF(self->intern);
+    PyObject_GC_Track(self);
+
     /* namespace_separator is either NULL or contains one char + \0 */
     self->itself = XML_ParserCreate_MM(encoding, &ExpatMemoryHandler,
                                        namespace_separator);
+    if (self->itself == NULL) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "XML_ParserCreate failed");
+        Py_DECREF(self);
+        return NULL;
+    }
 #if ((XML_MAJOR_VERSION >= 2) && (XML_MINOR_VERSION >= 1)) || defined(XML_HAS_SET_HASH_SALT)
     /* This feature was added upstream in libexpat 2.1.0.  Our expat copy
      * has a backport of this feature where we also define XML_HAS_SET_HASH_SALT
@@ -1190,15 +1200,6 @@
     XML_SetHashSalt(self->itself,
                     (unsigned long)_Py_HashSecret.prefix);
 #endif
-    self->intern = intern;
-    Py_XINCREF(self->intern);
-    PyObject_GC_Track(self);
-    if (self->itself == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        "XML_ParserCreate failed");
-        Py_DECREF(self);
-        return NULL;
-    }
     XML_SetUserData(self->itself, (void *)self);
     XML_SetUnknownEncodingHandler(self->itself,
                   (XML_UnknownEncodingHandler) PyUnknownEncodingHandler, NULL);

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


More information about the Python-checkins mailing list