summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-10-09 16:05:55 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2018-10-09 16:06:56 +0200
commitebecf569f98b83bcd0fab20418a5983e6f14d39e (patch)
tree7a5f7a87f848fab2cd4dc826a90b314374fe6a32
parentefa5674a9b26864d35618360c2fc99f0b3374a64 (diff)
parent2845f859c19965691855c66bc18d94a4e06ff329 (diff)
downloadphp-git-ebecf569f98b83bcd0fab20418a5983e6f14d39e.tar.gz
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fix #30875: xml_parse_into_struct() does not resolve entities
-rw-r--r--NEWS3
-rw-r--r--ext/xml/tests/bug30875.phpt42
-rw-r--r--ext/xml/xml.c1
3 files changed, 45 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 08f6b37c6e..f3cff388ab 100644
--- a/NEWS
+++ b/NEWS
@@ -33,6 +33,9 @@ PHP NEWS
. Fixed bug #76965 (INI_SCANNER_RAW doesn't strip trailing whitespace).
(Pierrick)
+- XML:
+ . Fixed bug #30875 (xml_parse_into_struct() does not resolve entities). (cmb)
+
11 Oct 2018, PHP 7.2.11
- Core:
diff --git a/ext/xml/tests/bug30875.phpt b/ext/xml/tests/bug30875.phpt
new file mode 100644
index 0000000000..c5254e9668
--- /dev/null
+++ b/ext/xml/tests/bug30875.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Bug #30875 (xml_parse_into_struct() does not resolve entities)
+--SKIPIF--
+<?php
+if (!extension_loaded('xml')) die('skip xml extension not available');
+?>
+--FILE--
+<?php
+
+$xml = <<<XML
+<!DOCTYPE dtd [
+ <!ENTITY ref "ent">
+]>
+<elt att="&ref;">a&ref;</elt>
+XML;
+
+$parser = xml_parser_create();
+xml_parse_into_struct($parser, $xml, $vals);
+xml_parser_free($parser);
+var_dump($vals);
+?>
+===DONE===
+--EXPECT--
+array(1) {
+ [0]=>
+ array(5) {
+ ["tag"]=>
+ string(3) "ELT"
+ ["type"]=>
+ string(8) "complete"
+ ["level"]=>
+ int(1)
+ ["attributes"]=>
+ array(1) {
+ ["ATT"]=>
+ string(3) "ent"
+ }
+ ["value"]=>
+ string(4) "aent"
+ }
+}
+===DONE===
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 7f1bb30571..9b8281e1b3 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -1437,7 +1437,6 @@ PHP_FUNCTION(xml_parse_into_struct)
parser->level = 0;
parser->ltags = safe_emalloc(XML_MAXLEVEL, sizeof(char *), 0);
- XML_SetDefaultHandler(parser->parser, _xml_defaultHandler);
XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);