From: Serhiy Storchaka Date: Wed, 9 Dec 2015 17:44:30 +0000 (+0200) Subject: Fixed possible leaks in ElementTree parser. X-Git-Tag: v3.6.0a1~932^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a29eb08fb97fff461b62682da4ee9ac6ea8db5bf;p=thirdparty%2FPython%2Fcpython.git Fixed possible leaks in ElementTree parser. --- diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 5d15ed3b1b92..915a0be4d4a2 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2935,8 +2935,10 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, /* 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 = PyUnicode_DecodeUTF8(attrib_in[1], strlen(attrib_in[1]), "strict"); @@ -2944,6 +2946,7 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, Py_XDECREF(value); Py_XDECREF(key); Py_DECREF(attrib); + Py_DECREF(tag); return; } ok = PyDict_SetItem(attrib, key, value); @@ -2951,6 +2954,7 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, Py_DECREF(key); if (ok < 0) { Py_DECREF(attrib); + Py_DECREF(tag); return; } attrib_in += 2; @@ -2958,8 +2962,10 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, } else { /* Pass an empty dictionary on */ attrib = PyDict_New(); - if (!attrib) + if (!attrib) { + Py_DECREF(tag); return; + } } if (TreeBuilder_CheckExact(self->target)) {