From: Rob Richards Date: Thu, 20 Sep 2007 09:30:17 +0000 (+0000) Subject: fix bug #42139 (XMLReader option constants are broken using XML()) X-Git-Tag: RELEASE_2_0_0a1~1784 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2fab0252565ed778d3ace6c56367e02718fb5909;p=php fix bug #42139 (XMLReader option constants are broken using XML()) add test --- diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 8376e4fa38..9922c1a23d 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -1096,7 +1096,7 @@ PHP_METHOD(xmlreader, XML) xmlreader_object *intern = NULL; zstr source; char *uri = NULL, *encoding = NULL; - int resolved_path_len; + int resolved_path_len, ret = 0; char *directory=NULL, resolved_path[MAXPATHLEN]; xmlParserInputBufferPtr inputbfr; xmlTextReaderPtr reader = NULL; @@ -1150,15 +1150,20 @@ PHP_METHOD(xmlreader, XML) xmlFree(uri); } if (reader != NULL) { - if (id == NULL) { - object_init_ex(return_value, xmlreader_class_entry); - intern = (xmlreader_object *)zend_objects_get_address(return_value TSRMLS_CC); - } else { - RETVAL_TRUE; +#if LIBXML_VERSION >= 20628 + ret = xmlTextReaderSetup(reader, NULL, uri, encoding, options); +#endif + if (ret == 0) { + if (id == NULL) { + object_init_ex(return_value, xmlreader_class_entry); + intern = (xmlreader_object *)zend_objects_get_address(return_value TSRMLS_CC); + } else { + RETVAL_TRUE; + } + intern->input = inputbfr; + intern->ptr = reader; + return; } - intern->input = inputbfr; - intern->ptr = reader; - return; } } diff --git a/ext/xmlreader/tests/bug42139.phpt b/ext/xmlreader/tests/bug42139.phpt new file mode 100644 index 0000000000..19602f0103 --- /dev/null +++ b/ext/xmlreader/tests/bug42139.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #42139 (XMLReader option constants are broken using XML()) +--SKIPIF-- + +--FILE-- + + + +]> +&x; +XML; + +$reader = new XMLReader; +$reader->XML( $xml, NULL, LIBXML_NOENT); +while ( $reader->read() ) { + echo "{$reader->nodeType}, {$reader->name}, {$reader->value}\n"; +} +$reader->close(); + +?> +--EXPECT-- +10, root, +1, root, +3, #text, y +15, root,