mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-8.0'
* PHP-8.0: Fix #81351: xml_parse may fail, but has no error code
This commit is contained in:
commit
0f1bf4bbd7
4 changed files with 39 additions and 9 deletions
|
@ -563,16 +563,8 @@ XML_Parse(XML_Parser parser, const XML_Char *data, int data_len, int is_final)
|
|||
{
|
||||
int error;
|
||||
|
||||
if (parser->parser->lastError.level >= XML_ERR_WARNING) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
error = xmlParseChunk(parser->parser, (char *) data, data_len, is_final);
|
||||
if (error) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
return !error && parser->parser->lastError.level <= XML_ERR_WARNING;
|
||||
}
|
||||
|
||||
PHP_XML_API int
|
||||
|
|
|
@ -21,6 +21,10 @@ HERE;
|
|||
xml_parse($parser, $xml);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: xml_parse(): Parser must not be called recursively in %s%ebug73135.php on line %d
|
||||
|
||||
Warning: xml_parse(): Parser must not be called recursively in %s%ebug73135.php on line %d
|
||||
|
||||
Warning: xml_parse(): Unable to call handler ahihi() in %s%ebug73135.php on line %d
|
||||
|
||||
Warning: xml_parse(): Unable to call handler ahihi() in %s%ebug73135.php on line %d
|
||||
|
|
26
ext/xml/tests/bug81351.phpt
Normal file
26
ext/xml/tests/bug81351.phpt
Normal file
|
@ -0,0 +1,26 @@
|
|||
--TEST--
|
||||
Bug #81351 (xml_parse may fail, but has no error code)
|
||||
--EXTENSIONS--
|
||||
xml
|
||||
--FILE--
|
||||
<?php
|
||||
$xml = <<<XML
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<soap:Body>
|
||||
<X xmlns="example.org">
|
||||
XML;
|
||||
|
||||
$parser = xml_parser_create_ns('UTF-8');
|
||||
$success = xml_parse($parser, $xml, false);
|
||||
$code = xml_get_error_code($parser);
|
||||
$error = xml_error_string($code);
|
||||
echo "xml_parse returned $success, xml_get_error_code = $code, xml_error_string = $error\r\n";
|
||||
$success = xml_parse($parser, 'Y>', true);
|
||||
$code = xml_get_error_code($parser);
|
||||
$error = xml_error_string($code);
|
||||
echo "xml_parse returned $success, xml_get_error_code = $code, xml_error_string = $error\r\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
xml_parse returned 1, xml_get_error_code = 0, xml_error_string = No error
|
||||
xml_parse returned 0, xml_get_error_code = 5, xml_error_string = Invalid document end
|
|
@ -1250,6 +1250,10 @@ PHP_FUNCTION(xml_parse)
|
|||
}
|
||||
|
||||
parser = Z_XMLPARSER_P(pind);
|
||||
if (parser->isparsing) {
|
||||
php_error_docref(NULL, E_WARNING, "Parser must not be called recursively");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
parser->isparsing = 1;
|
||||
ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, isFinal);
|
||||
parser->isparsing = 0;
|
||||
|
@ -1297,6 +1301,10 @@ PHP_FUNCTION(xml_parse_into_struct)
|
|||
XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
|
||||
XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
|
||||
|
||||
if (parser->isparsing) {
|
||||
php_error_docref(NULL, E_WARNING, "Parser must not be called recursively");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
parser->isparsing = 1;
|
||||
ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, 1);
|
||||
parser->isparsing = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue