From 33ea29772deb3fbe39dba2c7b5968dced3d2ed5f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 9 Dec 2015 19:44:30 +0200 Subject: [PATCH] Fixed possible leaks in ElementTree parser. --- Modules/_elementtree.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 2bf8014f4c..2647c7bc2a 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2227,8 +2227,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 = makestring(attrib_in[1], strlen(attrib_in[1])); @@ -2236,6 +2238,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); @@ -2243,6 +2246,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; @@ -2260,8 +2264,10 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in, 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 -- 2.50.1