]> granicus.if.org Git - php/commitdiff
- Fixed bug #51615 (PHP crash with wrong HTML in SimpleXML)
authorFelipe Pena <felipe@php.net>
Tue, 20 Apr 2010 16:24:21 +0000 (16:24 +0000)
committerFelipe Pena <felipe@php.net>
Tue, 20 Apr 2010 16:24:21 +0000 (16:24 +0000)
NEWS
ext/simplexml/simplexml.c
ext/simplexml/tests/bug51615.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 85316bab20fb2cb4ae25cf2e9ab9ed0c847923e0..7b533f1a9ce150f78ccef814d455b213b7c6f958 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,7 @@ PHP                                                                        NEWS
   requests (Fixes CVE-2010-0397, bug #51288). (Raphael Geissert)
 - Fixed 64-bit integer overflow in mhash_keygen_s2k(). (ClĂ©ment LECIGNE, Stas) 
 
+- Fixed bug #51615 (PHP crash with wrong HTML in SimpleXML). (Felipe)
 - Fixed bug #51609 (pg_copy_to: Invalid results when using fourth parameter).
   (Felipe)
 - Fixed bug #51608 (pg_copy_to: WARNING: nonstandard use of \\ in a string
index f1843b497fabcb34dbb577e9eee8510338d1e3f5..3f41fc8357d4f60ad0c7ce7031e7d4080b0f0798 100644 (file)
@@ -988,9 +988,14 @@ static void sxe_dimension_delete(zval *object, zval *offset TSRMLS_DC)
 static inline char * sxe_xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine) /* {{{ */
 {
        xmlChar *tmp = xmlNodeListGetString(doc, list, inLine);
-       char    *res = estrdup((char*)tmp);
-
-       xmlFree(tmp);
+       char    *res;
+       
+       if (tmp) {
+               res = estrdup((char*)tmp);
+               xmlFree(tmp);
+       } else {
+               res = STR_EMPTY_ALLOC();
+       }
 
        return res;
 }
diff --git a/ext/simplexml/tests/bug51615.phpt b/ext/simplexml/tests/bug51615.phpt
new file mode 100644 (file)
index 0000000..c5572f5
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+Bug #51615 (PHP crash with wrong HTML in SimpleXML)
+--SKIPIF--
+<?php if (!extension_loaded("simplexml")) print "skip"; ?>
+--FILE--
+<?php
+
+$dom = new DOMDocument;
+$dom->loadHTML('<span title=""y">x</span><span title=""z">x</span>');
+$html = simplexml_import_dom($dom);
+
+foreach ($html->body->span as $obj) {
+       var_dump((string)$obj->title);
+}
+
+?>
+--EXPECTF--
+Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity, line: 1 in %s on line %d
+
+Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity, line: 1 in %s on line %d
+string(0) ""
+string(0) ""