]> granicus.if.org Git - php/commitdiff
MFH: fix bug #42139 (XMLReader option constants are broken using XML())
authorRob Richards <rrichards@php.net>
Thu, 20 Sep 2007 09:30:45 +0000 (09:30 +0000)
committerRob Richards <rrichards@php.net>
Thu, 20 Sep 2007 09:30:45 +0000 (09:30 +0000)
add test

ext/xmlreader/php_xmlreader.c
ext/xmlreader/tests/bug42139.phpt [new file with mode: 0644]

index 3f48d5296a3c57965428d33f34b4e261102659b5..933dee611b3f1b29a51de996b11db36597a14c75 100644 (file)
@@ -1060,7 +1060,7 @@ PHP_METHOD(xmlreader, XML)
        long options = 0;
        xmlreader_object *intern = NULL;
        char *source, *uri = NULL, *encoding = NULL;
-       int resolved_path_len;
+       int resolved_path_len, ret = 0;
        char *directory=NULL, resolved_path[MAXPATHLEN];
        xmlParserInputBufferPtr inputbfr;
        xmlTextReaderPtr reader;
@@ -1105,15 +1105,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 (file)
index 0000000..19602f0
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+Bug #42139 (XMLReader option constants are broken using XML())
+--SKIPIF--
+<?php if (!extension_loaded("xmlreader")) print "skip";
+if (LIBXML_VERSION < 20628) die("skip: libxml2 2.6.28+ required");
+?>
+--FILE--
+<?php
+
+$xml = <<<XML
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE root [
+<!ELEMENT root ANY>
+<!ENTITY x "y">
+]>
+<root>&x;</root>
+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,