[Python-checkins] cpython (2.7): Fixed possible leaks in ElementTree parser.

serhiy.storchaka python-checkins at python.org
Wed Dec 9 12:49:34 EST 2015


https://hg.python.org/cpython/rev/002d8b981128
changeset:   99518:002d8b981128
branch:      2.7
parent:      99511:8459f530aaed
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Wed Dec 09 19:44:30 2015 +0200
summary:
  Fixed possible leaks in ElementTree parser.

files:
  Modules/_elementtree.c |  10 ++++++++--
  1 files changed, 8 insertions(+), 2 deletions(-)


diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -2227,8 +2227,10 @@
     /* attributes */
     if (attrib_in[0]) {
         attrib = PyDict_New();
-        if (!attrib)
+        if (!attrib) {
+            Py_DECREF(tag);
             return;
+        }
         while (attrib_in[0] && attrib_in[1]) {
             PyObject* key = makeuniversal(self, attrib_in[0]);
             PyObject* value = makestring(attrib_in[1], strlen(attrib_in[1]));
@@ -2236,6 +2238,7 @@
                 Py_XDECREF(value);
                 Py_XDECREF(key);
                 Py_DECREF(attrib);
+                Py_DECREF(tag);
                 return;
             }
             ok = PyDict_SetItem(attrib, key, value);
@@ -2243,6 +2246,7 @@
             Py_DECREF(key);
             if (ok < 0) {
                 Py_DECREF(attrib);
+                Py_DECREF(tag);
                 return;
             }
             attrib_in += 2;
@@ -2260,8 +2264,10 @@
         if (attrib == Py_None) {
             Py_DECREF(attrib);
             attrib = PyDict_New();
-            if (!attrib)
+            if (!attrib) {
+                Py_DECREF(tag);
                 return;
+            }
         }
         res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib);
     } else

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


More information about the Python-checkins mailing list