summaryrefslogtreecommitdiff
path: root/ext/xml/tests
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-10-09 16:04:43 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2018-10-09 16:04:43 +0200
commit2845f859c19965691855c66bc18d94a4e06ff329 (patch)
treef303f79d3495ac282035d9b73623d553333d8158 /ext/xml/tests
parentf42d7bddc0479651ecf7f9cdf375bba74b609bea (diff)
downloadphp-git-2845f859c19965691855c66bc18d94a4e06ff329.tar.gz
Fix #30875: xml_parse_into_struct() does not resolve entities
Setting up an empty default handler is not only useless, but actually harmful, since internal entity-references are not resolved anymore. From the libexpat docs[1]: | Setting the handler with this call has the side effect of | turning off expansion of references to internally defined general | entities. Instead these references are passed to the default | handler. [1] <https://www.xml.com/pub/1999/09/expat/reference.html#setdefhandler>
Diffstat (limited to 'ext/xml/tests')
-rw-r--r--ext/xml/tests/bug30875.phpt42
1 files changed, 42 insertions, 0 deletions
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===