diff --git a/ext/xml/compat.c b/ext/xml/compat.c index 012e6b134bc..e5db4469dc3 100644 --- a/ext/xml/compat.c +++ b/ext/xml/compat.c @@ -359,7 +359,10 @@ _external_entity_ref_handler(void *user, const xmlChar *names, int type, const x return; } - parser->h_external_entity_ref(parser, names, (XML_Char *) "", sys_id, pub_id); + if (!parser->h_external_entity_ref(parser, names, (XML_Char *) "", sys_id, pub_id)) { + xmlStopParser(parser->parser); + parser->parser->errNo = XML_ERROR_EXTERNAL_ENTITY_HANDLING; + }; } static xmlEntityPtr diff --git a/ext/xml/tests/bug71592.phpt b/ext/xml/tests/bug71592.phpt new file mode 100644 index 00000000000..28a316a28ee --- /dev/null +++ b/ext/xml/tests/bug71592.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #71592 (External entity processing never fails) +--SKIPIF-- + +--FILE-- + + +]> + +

&pic;

+

+ +XML; + +$parser = xml_parser_create_ns('UTF-8'); +xml_set_external_entity_ref_handler($parser, function () { + return false; +}); +xml_parse($parser, $xml); +var_dump(xml_get_error_code($parser)); +?> +===DONE=== +--EXPECT-- +int(21) +===DONE===