summaryrefslogtreecommitdiff
path: root/ext/xmlreader
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2007-09-20 09:30:45 +0000
committerRob Richards <rrichards@php.net>2007-09-20 09:30:45 +0000
commitadb1cd835dfb50699742f526e5c2ea047d79bdc5 (patch)
tree49d86a990d71e81ac87e3be36e58508739b97f10 /ext/xmlreader
parent8d377a698a73e1abc799f42fe932b1df61966c83 (diff)
downloadphp-git-adb1cd835dfb50699742f526e5c2ea047d79bdc5.tar.gz
MFH: fix bug #42139 (XMLReader option constants are broken using XML())
add test
Diffstat (limited to 'ext/xmlreader')
-rw-r--r--ext/xmlreader/php_xmlreader.c23
-rw-r--r--ext/xmlreader/tests/bug42139.phpt31
2 files changed, 45 insertions, 9 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index 3f48d5296a..933dee611b 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -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
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--
+<?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,