summaryrefslogtreecommitdiff
path: root/ext/xmlreader/php_xmlreader.c
diff options
context:
space:
mode:
authorScott MacVicar <scottmac@php.net>2011-05-13 05:54:34 +0000
committerScott MacVicar <scottmac@php.net>2011-05-13 05:54:34 +0000
commitdf0ce635e445d0bfe7181ac49b1f2c08696df4e1 (patch)
tree1b0b9a25a3aaab2552e334452884bb33048044d2 /ext/xmlreader/php_xmlreader.c
parenta0857d56acce3a52bd61bcd95b190ec3e9fb011e (diff)
downloadphp-git-df0ce635e445d0bfe7181ac49b1f2c08696df4e1.tar.gz
Fix use after free() in XMLReader::xml()
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
-rw-r--r--ext/xmlreader/php_xmlreader.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index d029f5efca..9b9f852169 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -1092,9 +1092,7 @@ PHP_METHOD(xmlreader, XML)
uri = (char *) xmlCanonicPath((const xmlChar *) resolved_path);
}
reader = xmlNewTextReader(inputbfr, uri);
- if (uri) {
- xmlFree(uri);
- }
+
if (reader != NULL) {
#if LIBXML_VERSION >= 20628
ret = xmlTextReaderSetup(reader, NULL, uri, encoding, options);
@@ -1108,11 +1106,20 @@ PHP_METHOD(xmlreader, XML)
}
intern->input = inputbfr;
intern->ptr = reader;
+
+ if (uri) {
+ xmlFree(uri);
+ }
+
return;
}
}
}
+ if (uri) {
+ xmlFree(uri);
+ }
+
if (inputbfr) {
xmlFreeParserInputBuffer(inputbfr);
}