Merge branch 'PHP-8.0'

* PHP-8.0:
  Fix #81351: xml_parse may fail, but has no error code
This commit is contained in:
Christoph M. Becker 2021-08-13 17:39:19 +02:00
commit 0f1bf4bbd7
No known key found for this signature in database
GPG key ID: D66C9593118BCCB6
4 changed files with 39 additions and 9 deletions

View file

@ -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

View file

@ -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

View 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

View file

@ -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;