mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +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;
|
int error;
|
||||||
|
|
||||||
if (parser->parser->lastError.level >= XML_ERR_WARNING) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
error = xmlParseChunk(parser->parser, (char *) data, data_len, is_final);
|
error = xmlParseChunk(parser->parser, (char *) data, data_len, is_final);
|
||||||
if (error) {
|
return !error && parser->parser->lastError.level <= XML_ERR_WARNING;
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_XML_API int
|
PHP_XML_API int
|
||||||
|
|
|
@ -21,6 +21,10 @@ HERE;
|
||||||
xml_parse($parser, $xml);
|
xml_parse($parser, $xml);
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--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
|
||||||
|
|
||||||
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);
|
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;
|
parser->isparsing = 1;
|
||||||
ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, isFinal);
|
ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, isFinal);
|
||||||
parser->isparsing = 0;
|
parser->isparsing = 0;
|
||||||
|
@ -1297,6 +1301,10 @@ PHP_FUNCTION(xml_parse_into_struct)
|
||||||
XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
|
XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);
|
||||||
XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
|
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;
|
parser->isparsing = 1;
|
||||||
ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, 1);
|
ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, 1);
|
||||||
parser->isparsing = 0;
|
parser->isparsing = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue