]> granicus.if.org Git - php/commitdiff
Promote warnings to exceptions in ext/xmlreader
authorMáté Kocsis <kocsismate@woohoolabs.com>
Wed, 19 Aug 2020 20:35:22 +0000 (22:35 +0200)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Tue, 25 Aug 2020 09:54:45 +0000 (11:54 +0200)
Closes GH-6021

17 files changed:
ext/xmlreader/php_xmlreader.c
ext/xmlreader/php_xmlreader.stub.php
ext/xmlreader/php_xmlreader_arginfo.h
ext/xmlreader/tests/001.phpt
ext/xmlreader/tests/002.phpt
ext/xmlreader/tests/003-get-errors.phpt
ext/xmlreader/tests/003-move-errors.phpt
ext/xmlreader/tests/003.phpt
ext/xmlreader/tests/007.phpt
ext/xmlreader/tests/014.phpt
ext/xmlreader/tests/015-get-errors.phpt
ext/xmlreader/tests/015-move-errors.phpt
ext/xmlreader/tests/expand_error.phpt
ext/xmlreader/tests/next_basic.phpt
ext/xmlreader/tests/schema-bad.xsd [new file with mode: 0644]
ext/xmlreader/tests/setParserProperty_error.phpt
ext/xmlreader/tests/setSchema_error.phpt

index efed79a2395fdfbf63d4e0ddd2cea19cd5e219a8..7b2619540956e272aa0ae458c7f793b38a387b6e 100644 (file)
@@ -175,7 +175,7 @@ zval *xmlreader_write_property(zend_object *object, zend_string *name, zval *val
                hnd = zend_hash_find_ptr(obj->prop_handler, name);
        }
        if (hnd != NULL) {
-               php_error_docref(NULL, E_WARNING, "Cannot write to read-only property");
+               zend_throw_error(NULL, "Cannot write to read-only property");
        } else {
                value = zend_std_write_property(object, name, value, cache_slot);
        }
@@ -391,8 +391,8 @@ static void php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_rea
        }
 
        if (!name_len) {
-               php_error_docref(NULL, E_WARNING, "Argument cannot be an empty string");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
        }
 
        id = ZEND_THIS;
@@ -480,8 +480,8 @@ static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int t
        }
 
        if (source != NULL && !source_len) {
-               php_error_docref(NULL, E_WARNING, "Schema data source is required");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
        }
 
        id = ZEND_THIS;
@@ -506,15 +506,16 @@ static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int t
                        intern->schema = schema;
 
                        RETURN_TRUE;
+               } else {
+                       php_error_docref(NULL, E_WARNING, "Schema contains errors");
+                       RETURN_FALSE;
                }
+       } else {
+               zend_throw_error(NULL, "Schema must be set prior to reading");
+               RETURN_THROWS();
        }
-
-       php_error_docref(NULL, E_WARNING, "Unable to set schema. This must be set prior to reading or schema contains errors.");
-
-       RETURN_FALSE;
 #else
-       php_error_docref(NULL, E_WARNING, "No Schema support built into libxml.");
-
+       php_error_docref(NULL, E_WARNING, "No schema support built into libxml");
        RETURN_FALSE;
 #endif
 }
@@ -585,9 +586,14 @@ PHP_METHOD(XMLReader, getAttributeNs)
                RETURN_THROWS();
        }
 
-       if (name_len == 0 || ns_uri_len == 0) {
-               php_error_docref(NULL, E_WARNING, "Attribute Name and Namespace URI cannot be empty");
-               RETURN_FALSE;
+       if (name_len == 0) {
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
+       }
+
+       if (ns_uri_len == 0) {
+               zend_argument_value_error(2, "cannot be empty");
+               RETURN_THROWS();
        }
 
        id = ZEND_THIS;
@@ -622,8 +628,8 @@ PHP_METHOD(XMLReader, getParserProperty)
                retval = xmlTextReaderGetParserProp(intern->ptr,property);
        }
        if (retval == -1) {
-               php_error_docref(NULL, E_WARNING, "Invalid parser property");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "must be a valid parser property");
+               RETURN_THROWS();
        }
 
        RETURN_BOOL(retval);
@@ -660,8 +666,8 @@ PHP_METHOD(XMLReader, moveToAttribute)
        }
 
        if (name_len == 0) {
-               php_error_docref(NULL, E_WARNING, "Attribute Name is required");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
        }
 
        id = ZEND_THIS;
@@ -719,9 +725,14 @@ PHP_METHOD(XMLReader, moveToAttributeNs)
                RETURN_THROWS();
        }
 
-       if (name_len == 0 || ns_uri_len == 0) {
-               php_error_docref(NULL, E_WARNING, "Attribute Name and Namespace URI cannot be empty");
-               RETURN_FALSE;
+       if (name_len == 0) {
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
+       }
+
+       if (ns_uri_len == 0) {
+               zend_argument_value_error(2, "cannot be empty");
+               RETURN_THROWS();
        }
 
        id = ZEND_THIS;
@@ -772,17 +783,17 @@ PHP_METHOD(XMLReader, read)
 
        id = ZEND_THIS;
        intern = Z_XMLREADER_P(id);
-       if (intern != NULL && intern->ptr != NULL) {
-               retval = xmlTextReaderRead(intern->ptr);
-               if (retval == -1) {
-                       RETURN_FALSE;
-               } else {
-                       RETURN_BOOL(retval);
-               }
+       if (intern == NULL || intern->ptr == NULL) {
+               zend_throw_error(NULL, "Data must be loaded before reading");
+               RETURN_THROWS();
        }
 
-       php_error_docref(NULL, E_WARNING, "Load Data before trying to read");
-       RETURN_FALSE;
+       retval = xmlTextReaderRead(intern->ptr);
+       if (retval == -1) {
+               RETURN_FALSE;
+       } else {
+               RETURN_BOOL(retval);
+       }
 }
 /* }}} */
 
@@ -816,8 +827,7 @@ PHP_METHOD(XMLReader, next)
                }
        }
 
-       php_error_docref(NULL, E_WARNING, "Load Data before trying to read");
-       RETURN_FALSE;
+       zend_throw_error(NULL, "Data must be loaded before reading");
 }
 /* }}} */
 
@@ -848,8 +858,8 @@ PHP_METHOD(XMLReader, open)
        }
 
        if (!source_len) {
-               php_error_docref(NULL, E_WARNING, "Empty string supplied as input");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
        }
 
        valid_file = _xmlreader_get_valid_file_path(source, resolved_path, MAXPATHLEN );
@@ -920,8 +930,8 @@ PHP_METHOD(XMLReader, setSchema)
        }
 
        if (source != NULL && !source_len) {
-               php_error_docref(NULL, E_WARNING, "Schema data source is required");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
        }
 
        id = ZEND_THIS;
@@ -932,15 +942,16 @@ PHP_METHOD(XMLReader, setSchema)
 
                if (retval == 0) {
                        RETURN_TRUE;
+               } else {
+                       php_error_docref(NULL, E_WARNING, "Schema contains errors");
+                       RETURN_FALSE;
                }
+       } else {
+               zend_throw_error(NULL, "Schema must be set prior to reading");
+               RETURN_THROWS();
        }
-
-       php_error_docref(NULL, E_WARNING, "Unable to set schema. This must be set prior to reading or schema contains errors.");
-
-       RETURN_FALSE;
 #else
-       php_error_docref(NULL, E_WARNING, "No Schema support built into libxml.");
-
+       php_error_docref(NULL, E_WARNING, "No schema support built into libxml");
        RETURN_FALSE;
 #endif
 }
@@ -967,8 +978,8 @@ PHP_METHOD(XMLReader, setParserProperty)
                retval = xmlTextReaderSetParserProp(intern->ptr,property, value);
        }
        if (retval == -1) {
-               php_error_docref(NULL, E_WARNING, "Invalid parser property");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "must be a valid parser property");
+               RETURN_THROWS();
        }
 
        RETURN_TRUE;
@@ -1022,8 +1033,8 @@ PHP_METHOD(XMLReader, XML)
        }
 
        if (!source_len) {
-               php_error_docref(NULL, E_WARNING, "Empty string supplied as input");
-               RETURN_FALSE;
+               zend_argument_value_error(1, "cannot be empty");
+               RETURN_THROWS();
        }
 
        inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE);
@@ -1105,7 +1116,7 @@ PHP_METHOD(XMLReader, expand)
                node = xmlTextReaderExpand(intern->ptr);
 
                if (node == NULL) {
-                       php_error_docref(NULL, E_WARNING, "An Error Occurred while expanding ");
+                       php_error_docref(NULL, E_WARNING, "An Error Occurred while expanding");
                        RETURN_FALSE;
                } else {
                        nodec = xmlDocCopyNode(node, docp, 1);
@@ -1117,8 +1128,8 @@ PHP_METHOD(XMLReader, expand)
                        }
                }
        } else {
-               php_error_docref(NULL, E_WARNING, "Load Data before trying to expand");
-               RETURN_FALSE;
+               zend_throw_error(NULL, "Data must be loaded before expanding");
+               RETURN_THROWS();
        }
 #else
        php_error(E_WARNING, "DOM support is not enabled");
index 9de30e5a7afd9ed5e080801f77f23276f6a847f3..582919d49721f41de52270227d153626ee4e49e6 100644 (file)
@@ -7,7 +7,7 @@ class XMLReader
     /** @return bool */
     public function close() {}
 
-    /** @return string|null|false */
+    /** @return string|null */
     public function getAttribute(string $name) {}
 
     /** @return string|null */
@@ -22,7 +22,7 @@ class XMLReader
     /** @return bool */
     public function isValid() {}
 
-    /** @return string|null|false */
+    /** @return string|null */
     public function lookupNamespace(string $prefix) {}
 
     /** @return bool */
index 749d8066f41cd76c5e1f59a0273ca168bea11682..0690d414163e551978501f42d38b2d4ee397d9c1 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 8bdec18c4ad8574fb1d3e4baca928949d5ec2438 */
+ * Stub hash: 90e6d525ba87399c54f36965ebf18dbf65084617 */
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_close, 0, 0, 0)
 ZEND_END_ARG_INFO()
index c10c1a51635a9480f9199a59bd07d3725692cd7d..cf255860556f4ed8bb5ae7ab46a4fb1010ab4ce3 100644 (file)
@@ -17,10 +17,15 @@ while ($reader->read()) {
 }
 $xmlstring = '';
 $reader = new XMLReader();
-$reader->XML($xmlstring);
+
+try {
+    $reader->XML($xmlstring);
+} catch (ValueError $exception) {
+    echo $exception->getMessage() . "\n";
+}
+
 ?>
---EXPECTF--
+--EXPECT--
 books
 books
-
-Warning: XMLReader::XML(): Empty string supplied as input in %s on line %d
+XMLReader::XML(): Argument #1 ($source) cannot be empty
index 6d12f02204759ce1296f7fce352174c802f58473..803c8c7243aa6e8a5612d4f07b97f8934804dd73 100644 (file)
@@ -10,7 +10,11 @@ $xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
 file_put_contents($filename, $xmlstring);
 
 $reader = new XMLReader();
-if ($reader->open('')) exit();
+try {
+    $reader->open('');
+} catch (ValueError $exception) {
+    echo $exception->getMessage() . "\n";
+}
 
 $reader = new XMLReader();
 if (!$reader->open($filename)) {
@@ -31,7 +35,7 @@ $reader->close();
 unlink($filename);
 
 ?>
---EXPECTF--
-Warning: XMLReader::open(): Empty string supplied as input in %s on line %d
+--EXPECT--
+XMLReader::open(): Argument #1 ($URI) cannot be empty
 books
 books
index a10529118f87eeea7417018173902ff5f5bdf056..e616bbc63ce707eedf0bb545ee9c8e1bc4027489 100644 (file)
@@ -31,8 +31,12 @@ while ($reader->read()) {
             echo $reader->value . "\n";
 
             // Test for call with an empty string argument
-            $attr = $reader->getAttribute('');
-            var_dump($attr);
+            try {
+                $reader->getAttribute('');
+            } catch (ValueError $exception) {
+                echo $exception->getMessage() . "\n";
+            }
+
             // Ensure that node pointer has not changed position
             echo $reader->name . ": ";
             echo $reader->value . "\n";
@@ -61,13 +65,11 @@ $reader->close();
 <?php
 unlink(__DIR__.'/003-get-errors.xml');
 ?>
---EXPECTF--
+--EXPECT--
 book
 bool(true)
 num: 1
-
-Warning: XMLReader::getAttribute(): Argument cannot be an empty string in %s on line %d
-bool(false)
+XMLReader::getAttribute(): Argument #1 ($name) cannot be empty
 num: 1
 NULL
 num: 1
index a00dbaf52442bd5292047d872a9d3a6f98d7eb49..24431b6a7e2a04e8d55fb987dc952268411db452 100644 (file)
@@ -31,8 +31,12 @@ while ($reader->read()) {
             echo $reader->value . "\n";
 
             // Test for call with an empty string argument
-            $attr = $reader->moveToAttribute('');
-            var_dump($attr);
+            try {
+                $reader->moveToAttribute('');
+            } catch (ValueError $exception) {
+                echo $exception->getMessage() . "\n";
+            }
+
             // Ensure that node pointer has not changed position
             echo $reader->name . ": ";
             echo $reader->value . "\n";
@@ -60,13 +64,11 @@ $reader->close();
 <?php
 unlink(__DIR__.'/003-move-errors.xml');
 ?>
---EXPECTF--
+--EXPECT--
 book
 bool(true)
 num: 1
-
-Warning: XMLReader::moveToAttribute(): Attribute Name is required in %s on line %d
-bool(false)
+XMLReader::moveToAttribute(): Argument #1 ($name) cannot be empty
 num: 1
 bool(false)
 num: 1
index c52c932c974a2c0bcec6f6d1d4e04986c233474e..9ecf9d62da7ca0493b918ea4315cf7beed205933 100644 (file)
@@ -68,14 +68,18 @@ while ($reader->read()) {
 
             var_dump($reader->moveToAttributeNo(20));
             var_dump($reader->moveToAttribute('missing-attribute'));
-            var_dump($reader->moveToAttribute(''));
+            try {
+                $reader->moveToAttribute('');
+            } catch (ValueError $exception) {
+                echo $exception->getMessage() . "\n";
+            }
         }
     }
 }
 $reader->close();
 unlink($filename);
 ?>
---EXPECTF--
+--EXPECT--
 num: 1
 idx: 2
 num: 1
@@ -84,6 +88,4 @@ num: 1
 idx: 2
 bool(false)
 bool(false)
-
-Warning: XMLReader::moveToAttribute(): Attribute Name is required in %s on line %d
-bool(false)
+XMLReader::moveToAttribute(): Argument #1 ($name) cannot be empty
index 796b9fa05c9d47243dac4e8ea8edff2821981996..6b8cab43f0f7fd9a41cb7108ba485939c03a4837 100644 (file)
@@ -42,13 +42,15 @@ $reader->close();
 $reader = new XMLReader();
 $reader->XML($xmlstring);
 
-if ($reader->setRelaxNGSchema('')) {
-    echo 'failed';
+try {
+    $reader->setRelaxNGSchema('');
+} catch (ValueError $exception) {
+    echo $exception->getMessage() . "\n";
 }
+
 $reader->close();
 ?>
---EXPECTF--
+--EXPECT--
 file relaxNG: ok
 string relaxNG: ok
-
-Warning: XMLReader::setRelaxNGSchema(): Schema data source is required in %s on line %d
+XMLReader::setRelaxNGSchema(): Argument #1 ($filename) cannot be empty
index fca94d2b1f3efde585587821d6ee00ebd9a45083..67c0e9fb93a6c461ff9d0015d7ff421bf18fe2ee 100644 (file)
@@ -24,12 +24,24 @@ while ($reader->read()) {
         // Find a node to try modifying
         if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
             // Try to set the value of the element from book1 to movie1
-            $reader->value = 'movie1';
+            try {
+                $reader->value = 'movie1';
+            } catch (Error $exception) {
+                echo $exception->getMessage() . "\n";
+            }
             // Try to set the value of the first "num" attribute from "1" to "num attribute 1"
             $attr = $reader->moveToFirstAttribute();
-            $reader->value = 'num attribute 1';
+            try {
+                $reader->value = 'num attribute 1';
+            } catch (Error $exception) {
+                echo $exception->getMessage() . "\n";
+            }
             // Try to set the name of the first attribute from "num" to "number"
-            $reader->name = 'number';
+            try {
+                $reader->name = 'number';
+            } catch (Error $exception) {
+                echo $exception->getMessage() . "\n";
+            }
         }
     }
 }
@@ -41,9 +53,7 @@ $reader->close();
 <?php
 unlink(__DIR__.'/_014.xml');
 ?>
---EXPECTF--
-Warning: main(): Cannot write to read-only property in %s on line %d
-
-Warning: main(): Cannot write to read-only property in %s on line %d
-
-Warning: main(): Cannot write to read-only property in %s on line %d
+--EXPECT--
+Cannot write to read-only property
+Cannot write to read-only property
+Cannot write to read-only property
index 5f17326b1b6aa66acce4c8e980b5827715ba5227..850d042a4b0c88efad6e19b5e11ad26e62ec46dd 100644 (file)
@@ -26,8 +26,12 @@ while ($reader->read()) {
             $attr = $reader->moveToNextAttribute();
 
             // Test for missing namespace argument
-            $attr = $reader->getAttributeNs('idx', null);
-            var_dump($attr);
+            try {
+                $attr = $reader->getAttributeNs('idx', null);
+            } catch (ValueError $exception) {
+                echo $exception->getMessage() . "\n";
+            }
+
             echo $reader->name . ": ";
             echo $reader->value . "\n";
         }
@@ -41,7 +45,6 @@ $reader->close();
 <?php
 unlink(__DIR__.'/015-get-errors.xml');
 ?>
---EXPECTF--
-Warning: XMLReader::getAttributeNs(): Attribute Name and Namespace URI cannot be empty in %s on line %d
-bool(false)
+--EXPECT--
+XMLReader::getAttributeNs(): Argument #2 ($namespaceURI) cannot be empty
 ns1:num: 1
index 5263b555b6ea8edcd1ed9d638505523b513c0fe6..2b5580d7ea4fd106fe3375114345f74c10898812 100644 (file)
@@ -24,7 +24,11 @@ while ($reader->read()) {
         // Find the book node
         if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
             // Test for missing namespace argument
-            $attr = $reader->moveToAttributeNs('idx', null);
+            try {
+                $reader->moveToAttributeNs('idx', null);
+            } catch (ValueError $exception) {
+                echo $exception->getMessage() . "\n";
+            }
         }
     }
 }
@@ -36,5 +40,5 @@ $reader->close();
 <?php
 unlink(__DIR__.'/015-move-errors.xml');
 ?>
---EXPECTF--
-Warning: XMLReader::moveToAttributeNs(): Attribute Name and Namespace URI cannot be empty in %s on line %d
+--EXPECT--
+XMLReader::moveToAttributeNs(): Argument #2 ($namespaceURI) cannot be empty
index 2813e836d9f761f432b2f839762695bd1cfe2ddd..59ab0365b60435a34fc6f2ca69d8072683797b10 100644 (file)
@@ -13,7 +13,13 @@ $xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
 <books><book>new book</book></books>';
 
 $reader = new XMLReader();
-var_dump($reader->expand());
+
+try {
+    $reader->expand();
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
+
 $reader->close();
 
 $reader = new XMLReader();
@@ -22,8 +28,7 @@ var_dump($reader->expand());
 $reader->close();
 ?>
 --EXPECTF--
-Warning: XMLReader::expand(): Load Data before trying to expand in %s on line %d
-bool(false)
+Data must be loaded before expanding
 
-Warning: XMLReader::expand(): An Error Occurred while expanding  in %s on line %d
+Warning: XMLReader::expand(): An Error Occurred while expanding in %s on line %d
 bool(false)
index e0663c23d3509c64c8df82dde1df910f0cfc9137..70d540c2c20ba121499b86d15830ed366671b254 100644 (file)
@@ -9,8 +9,19 @@ $xml = '<?xml version="1.0" encoding="UTF-8"?><nodes><node1><sub /></node1>
 <node2><sub /></node2><node3><sub /></node3><node4><sub /></node4></nodes>';
 
 $reader = new XMLReader();
-$reader->read();
-$reader->next();
+
+try {
+    $reader->read();
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
+
+try {
+    $reader->next();
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
+
 $reader->close();
 
 $reader->XML($xml);
@@ -28,10 +39,9 @@ echo $reader->name . PHP_EOL;
 $reader->close();
 
 ?>
---EXPECTF--
-Warning: XMLReader::read(): Load Data before trying to read in %s on line %d
-
-Warning: XMLReader::next(): Load Data before trying to read in %s on line %d
+--EXPECT--
+Data must be loaded before reading
+Data must be loaded before reading
 node1
 bool(true)
 node3
diff --git a/ext/xmlreader/tests/schema-bad.xsd b/ext/xmlreader/tests/schema-bad.xsd
new file mode 100644 (file)
index 0000000..d72af31
--- /dev/null
@@ -0,0 +1 @@
+asd
index 755a4e4772c4b39d14d14f11e7ac8114da07b2a0..9bdb0baa03259165f4b9835f54ab602eadaabb3b 100644 (file)
@@ -10,9 +10,12 @@ $xml = '<?xml version="1.0" encoding="UTF-8"?><books><book>new book</book></book
 $invalidProperty = -1;
 $reader = new XMLReader();
 $reader->XML($xml);
-var_dump($reader->setParserProperty(-1, true));
+try {
+    $reader->setParserProperty(-1, true);
+} catch (ValueError $exception) {
+    echo $exception->getMessage() . "\n";
+}
 $reader->close();
 ?>
---EXPECTF--
-Warning: XMLReader::setParserProperty(): Invalid parser property in %s on line %d
-bool(false)
+--EXPECT--
+XMLReader::setParserProperty(): Argument #1 ($property) must be a valid parser property
index 31bd4d6e3ed961aa528127ce80c70a74cf2d869d..2984455de8bba2de5bc0523451832560b84ca137 100644 (file)
@@ -6,24 +6,38 @@ XMLReader: setSchema Error
 <?php
 
 $reader = new XMLReader();
-var_dump($reader->setSchema(''));
+try {
+    $reader->setSchema('');
+} catch (ValueError $exception) {
+    echo $exception->getMessage() . "\n";
+}
 $reader->close();
 
 $reader = new XMLReader();
-var_dump($reader->setSchema('schema-missing-file.xsd'));
+try {
+    $reader->setSchema('schema-missing-file.xsd');
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 $reader->close();
 
 $reader = new XMLReader();
-var_dump($reader->setSchema('schema-empty.xsd'));
+try {
+    $reader->setSchema('schema-empty.xsd');
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
+
+$reader = new XMLReader();
+$reader->XML(<<<EOF
+<?xml version="1.0" encoding="UTF-8" ?>
+<foo/>
+EOF);
+var_dump(@$reader->setSchema('schema-bad.xsd'));
 $reader->close();
 ?>
---EXPECTF--
-
-Warning: XMLReader::setSchema(): Schema data source is required in %s on line %d
-bool(false)
-
-Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in %s on line %d
-bool(false)
-
-Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in %s on line %d
+--EXPECT--
+XMLReader::setSchema(): Argument #1 ($filename) cannot be empty
+Schema must be set prior to reading
+Schema must be set prior to reading
 bool(false)