]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #35447 (xml_parse_into_struct() chokes on the UTF-8 BOM)
authorRob Richards <rrichards@php.net>
Mon, 19 Dec 2005 14:17:30 +0000 (14:17 +0000)
committerRob Richards <rrichards@php.net>
Mon, 19 Dec 2005 14:17:30 +0000 (14:17 +0000)
add test

ext/xml/compat.c
ext/xml/tests/bug35447.phpt [new file with mode: 0644]

index 43e116b864ecb8199b6b6e69ece37d12ecdec506..7be85cab224d32847d4f25cf9fc9ee5aad25edf4 100644 (file)
@@ -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 (file)
index 0000000..ba8b81e
--- /dev/null
@@ -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"
+  }
+}