Fix GHSA-wg4p-4hqh-c3g9

This commit is contained in:
Niels Dossche 2024-12-18 18:44:05 +01:00 committed by Jakub Zelenka
parent b6004a043c
commit 0e715e71d9
No known key found for this signature in database
GPG key ID: 1C0779DC5C0A9DE4
2 changed files with 50 additions and 4 deletions

View file

@ -0,0 +1,42 @@
--TEST--
XML_OPTION_SKIP_TAGSTART bounds
--EXTENSIONS--
xml
--FILE--
<?php
$sample = "<?xml version=\"1.0\"?><test><child/></test>";
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_SKIP_TAGSTART, 100);
$res = xml_parse_into_struct($parser,$sample,$vals,$index);
var_dump($vals);
?>
--EXPECT--
array(3) {
[0]=>
array(3) {
["tag"]=>
string(0) ""
["type"]=>
string(4) "open"
["level"]=>
int(1)
}
[1]=>
array(3) {
["tag"]=>
string(0) ""
["type"]=>
string(8) "complete"
["level"]=>
int(2)
}
[2]=>
array(3) {
["tag"]=>
string(0) ""
["type"]=>
string(5) "close"
["level"]=>
int(1)
}
}

View file

@ -667,9 +667,11 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
array_init(&tag); array_init(&tag);
array_init(&atr); array_init(&atr);
_xml_add_to_info(parser, ZSTR_VAL(tag_name) + parser->toffset); char *skipped_tag_name = SKIP_TAGSTART(ZSTR_VAL(tag_name));
add_assoc_string(&tag, "tag", SKIP_TAGSTART(ZSTR_VAL(tag_name))); /* cast to avoid gcc-warning */ _xml_add_to_info(parser, skipped_tag_name);
add_assoc_string(&tag, "tag", skipped_tag_name);
add_assoc_string(&tag, "type", "open"); add_assoc_string(&tag, "type", "open");
add_assoc_long(&tag, "level", parser->level); add_assoc_long(&tag, "level", parser->level);
@ -736,9 +738,11 @@ void _xml_endElementHandler(void *userData, const XML_Char *name)
} else { } else {
array_init(&tag); array_init(&tag);
_xml_add_to_info(parser, ZSTR_VAL(tag_name) + parser->toffset); char *skipped_tag_name = SKIP_TAGSTART(ZSTR_VAL(tag_name));
add_assoc_string(&tag, "tag", SKIP_TAGSTART(ZSTR_VAL(tag_name))); /* cast to avoid gcc-warning */ _xml_add_to_info(parser, skipped_tag_name);
add_assoc_string(&tag, "tag", skipped_tag_name);
add_assoc_string(&tag, "type", "close"); add_assoc_string(&tag, "type", "close");
add_assoc_long(&tag, "level", parser->level); add_assoc_long(&tag, "level", parser->level);