summaryrefslogtreecommitdiff
path: root/ext/xml
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2005-12-19 14:17:30 +0000
committerRob Richards <rrichards@php.net>2005-12-19 14:17:30 +0000
commitfc4ebee3e322fe06e13c2583f8c3df4e376449b9 (patch)
tree782f535c96524eaee32f6b590b7a4135725f8b7b /ext/xml
parent2a130b19fcc99974ab1fb74522f8dbea3f505cdc (diff)
downloadphp-git-fc4ebee3e322fe06e13c2583f8c3df4e376449b9.tar.gz
MFH: Fixed bug #35447 (xml_parse_into_struct() chokes on the UTF-8 BOM)
add test
Diffstat (limited to 'ext/xml')
-rw-r--r--ext/xml/compat.c7
-rw-r--r--ext/xml/tests/bug35447.phpt48
2 files changed, 50 insertions, 5 deletions
diff --git a/ext/xml/compat.c b/ext/xml/compat.c
index 43e116b864..7be85cab22 100644
--- a/ext/xml/compat.c
+++ b/ext/xml/compat.c
@@ -405,15 +405,12 @@ XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *m
efree(parser);
return NULL;
}
- if (encoding != NULL) {
- parser->parser->encoding = xmlStrdup(encoding);
#if LIBXML_VERSION <= 20617
/* for older versions of libxml2, allow correct detection of
* charset in documents with a BOM: */
- } else {
- parser->parser->charset = XML_CHAR_ENCODING_NONE;
+ parser->parser->charset = XML_CHAR_ENCODING_NONE;
#endif
- }
+
parser->parser->replaceEntities = 1;
parser->parser->wellFormed = 0;
if (sep != NULL) {
diff --git a/ext/xml/tests/bug35447.phpt b/ext/xml/tests/bug35447.phpt
new file mode 100644
index 0000000000..ba8b81e46c
--- /dev/null
+++ b/ext/xml/tests/bug35447.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Bug #35447 (xml_parse_into_struct() chokes on the UTF-8 BOM)
+--SKIPIF--
+<?php
+if (! @xml_parser_create_ns('ISO-8859-1')) { die("skip xml_parser_create_ns is not supported on this plattform");}
+?>
+--FILE--
+<?php
+$data = <<<END_OF_XML
+\xEF\xBB\xBF<?xml version="1.0" encoding="utf-8"?\x3e
+<!DOCTYPE bundle [
+ <!ELEMENT bundle (resource)+>
+ <!ELEMENT resource (#PCDATA)>
+ <!ATTLIST resource
+ key CDATA #REQUIRED
+ type (literal|pattern|sub) "literal"
+ >
+]>
+<resource key="rSeeYou">A bient&amp;244;t</resource>
+END_OF_XML;
+
+$parser = xml_parser_create_ns('UTF-8');
+xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
+$result = xml_parse_into_struct($parser, $data, $vals, $index);
+xml_parser_free($parser);
+var_dump($vals);
+?>
+--EXPECT--
+array(1) {
+ [0]=>
+ array(5) {
+ ["tag"]=>
+ string(8) "resource"
+ ["type"]=>
+ string(8) "complete"
+ ["level"]=>
+ int(1)
+ ["attributes"]=>
+ array(2) {
+ ["key"]=>
+ string(7) "rSeeYou"
+ ["type"]=>
+ string(7) "literal"
+ }
+ ["value"]=>
+ string(13) "A bient&244;t"
+ }
+}