Re: [PATCH] ext/xml/compat.c fix for #32001
| From: | Christian Stocker | Date: | Thu, 17 Feb 2005 11:40:35 +0000 |
| Subject: | Re: [PATCH] ext/xml/compat.c fix for #32001 | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-15044@lists.php.net to get a copy of this message | ||
On 17.2.2005 12:26 Uhr, Joe Orton wrote:
libxml2's charset encoding auto-detection mode is broken with the push parser in current versions of libxml2, I found that recently: http://bugzilla.gnome.org/show_bug.cgi?id=162613 but trying to force it can trigger infinite loops in libxml2, which is what happens in http://bugs.php.net/?id=32001 So I think it's best to not force this mode. Future versions of libxml2 will set parser->charset to XML_CHAR_ENCODING_NONE by default with the push parser and will hence work as desired with no explicit setting of parser->charset required.Any BC breaks with that? Do I have to know now the encoding of the XML document, before I can use the push parser? But reading your bugreport at gnome.org, I assume it just defaults to UTF-8, right? chregu
Is this patch OK? http://www.apache.org/~jorton/php_xmlenc.diff Index: ext/xml/compat.c =================================================================== RCS file: /repository/php-src/ext/xml/compat.c,v retrieving revision 1.32.2.7 diff -u -r1.32.2.7 compat.c --- ext/xml/compat.c 17 Dec 2004 12:21:34 -0000 1.32.2.7 +++ ext/xml/compat.c 17 Feb 2005 11:12:08 -0000 @@ -379,8 +379,6 @@ } if (encoding != NULL) { parser->parser->encoding = xmlStrdup(encoding); - } else { - parser->parser->charset = XML_CHAR_ENCODING_NONE; } parser->parser->replaceEntities = 1; parser->parser->wellFormed = 0; Index: ext/xml/tests/bug32001.phpt =================================================================== RCS file: ext/xml/tests/bug32001.phpt diff -N ext/xml/tests/bug32001.phpt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ext/xml/tests/bug32001.phpt 17 Feb 2005 11:12:08 -0000 @@ -0,0 +1,40 @@ +--TEST-- +Bug #32001 (infinite loop in libxml character encoding detection) +--FILE-- +<?php +$myparser = xml_parser_create(''); +$simple = "<para><note>simple note</note></para>"; +xml_parse_into_struct($myparser, $simple, $myvals, $mytags); +var_dump($myvals); +--EXPECT-- +array(3) { + [0]=> + array(3) {-- christian stocker | Bitflux GmbH | schoeneggstrasse 5 | ch-8004 zurich phone +41 1 240 56 70 | mobile +41 76 561 88 60 | fax +41 1 240 56 71 http://www.bitflux.ch | chregu@bitflux.ch | gnupg-keyid 0x5CE1DECB+ ["tag"]=> + string(4) "PARA" + ["type"]=> + string(4) "open" + ["level"]=> + int(1)+ } + [1]=> + array(4) {+ ["tag"]=> + string(4) "NOTE" + ["type"]=> + string(8) "complete" + ["level"]=> + int(2) + ["value"]=> + string(11) "simple note"+ } + [2]=> + array(3) {+ ["tag"]=> + string(4) "PARA" + ["type"]=> + string(5) "close" + ["level"]=> + int(1)+ } +}