summaryrefslogtreecommitdiff
path: root/ext/xmlreader
diff options
context:
space:
mode:
authorStanley Sufficool <ssufficool@php.net>2013-10-05 09:57:13 -0700
committerStanley Sufficool <ssufficool@php.net>2013-10-05 09:57:13 -0700
commitd74b9cfee528936a50af7772c3dc56843a068c7f (patch)
tree42c00e21011c95d6f493805ea870f419b42e7880 /ext/xmlreader
parent690bbe170d9ed4597629e4e986575fbe0a2cb796 (diff)
parent3aaee86ee33af276d2e879f5a645cc6dc850de22 (diff)
downloadphp-git-d74b9cfee528936a50af7772c3dc56843a068c7f.tar.gz
Merge branch 'PHP-5.4' of https://git.php.net/push/php-src into PHP-5.4
* 'PHP-5.4' of https://git.php.net/push/php-src: - Fixed bug #65818 (Segfault with built-in webserver and chunked transfer encoding) - BFN Fix bug #65667: ftp_nb_continue produces segfault fix bug #64146 (serialize incorrectly saving objects when they are cloned) such a weird hack probably helps in finding regressions in the future Fixed bug #64230 (XMLReader does not suppress errors) typo: really fix bug #51936 Crash with clone xmlreader fix bug #59613 (Crash with clone XMLReader) fix bug #65808 the socket_connect() won't work with IPv6 address 5.4.22-dev now fix bug #62396 'make test' crashes starting with 5.3.14 (missing gzencode()) Fixed bug #61548 fix test fix memleak on resetting rebind_proc Fix bug #65322: compile time errors won't trigger auto loading 5.4.20 release date Add information about which INI file is which inside respective files - Updated to version 2013.6 (2013f)
Diffstat (limited to 'ext/xmlreader')
-rw-r--r--ext/xmlreader/php_xmlreader.c3
-rw-r--r--ext/xmlreader/tests/bug51936.phpt22
-rw-r--r--ext/xmlreader/tests/bug64230.phpt50
3 files changed, 73 insertions, 2 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index f4c2643212..adf282120e 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -805,7 +805,6 @@ PHP_METHOD(xmlreader, read)
if (intern != NULL && intern->ptr != NULL) {
retval = xmlTextReaderRead(intern->ptr);
if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occurred while reading");
RETURN_FALSE;
} else {
RETURN_BOOL(retval);
@@ -847,7 +846,6 @@ PHP_METHOD(xmlreader, next)
retval = xmlTextReaderNext(intern->ptr);
}
if (retval == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occurred while reading");
RETURN_FALSE;
} else {
RETURN_BOOL(retval);
@@ -1320,6 +1318,7 @@ PHP_MINIT_FUNCTION(xmlreader)
xmlreader_object_handlers.read_property = xmlreader_read_property;
xmlreader_object_handlers.write_property = xmlreader_write_property;
xmlreader_object_handlers.get_property_ptr_ptr = xmlreader_get_property_ptr_ptr;
+ xmlreader_object_handlers.clone_obj = NULL;
INIT_CLASS_ENTRY(ce, "XMLReader", xmlreader_functions);
ce.create_object = xmlreader_objects_new;
diff --git a/ext/xmlreader/tests/bug51936.phpt b/ext/xmlreader/tests/bug51936.phpt
new file mode 100644
index 0000000000..4b5f1012e7
--- /dev/null
+++ b/ext/xmlreader/tests/bug51936.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #51936 (Crash with clone XMLReader)
+--SKIPIF--
+<?php
+extension_loaded("xmlreader") or die("skip requires xmlreader");
+?>
+--FILE--
+<?php
+echo "Test\n";
+
+$xmlreader = new XMLReader();
+$xmlreader->xml("<a><b/></a>");
+
+$xmlreader->next();
+$xmlreader2 = clone $xmlreader;
+$xmlreader2->next();
+?>
+Done
+--EXPECTF--
+Test
+
+Fatal error: Trying to clone an uncloneable object of class XMLReader in %s on line %d
diff --git a/ext/xmlreader/tests/bug64230.phpt b/ext/xmlreader/tests/bug64230.phpt
new file mode 100644
index 0000000000..0b070925f3
--- /dev/null
+++ b/ext/xmlreader/tests/bug64230.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Bug #64230 (XMLReader does not suppress errors)
+--SKIPIF--
+<?php
+extension_loaded("xmlreader") or die("skip requires xmlreader");
+?>
+--FILE--
+<?php
+echo "Test\n";
+
+function show_internal_errors() {
+ foreach (libxml_get_errors() as $error) {
+ printf("Internal: %s\n", $error->message);
+ }
+ libxml_clear_errors();
+}
+
+echo "Internal errors TRUE\n";
+libxml_use_internal_errors(true);
+
+$x = new XMLReader;
+$x->xml("<root att/>");
+$x->read();
+
+show_internal_errors();
+
+echo "Internal errors FALSE\n";
+libxml_use_internal_errors(false);
+
+$x = new XMLReader;
+$x->xml("<root att/>");
+$x->read();
+
+show_internal_errors();
+
+?>
+Done
+--EXPECTF--
+Test
+Internal errors TRUE
+Internal: Specification mandate value for attribute att
+
+Internal errors FALSE
+
+Warning: XMLReader::read(): %s: parser error : Specification mandate value for attribute att in %s on line %d
+
+Warning: XMLReader::read(): <root att/> in %s on line %d
+
+Warning: XMLReader::read(): ^ in %s on line %d
+Done