Skip to content

Commit a5efd91

Browse files
nielsdosadoy
authored andcommitted
1 parent 6d080b9 commit a5efd91

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

ext/xml/tests/toffset_bounds.phpt

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
--TEST--
2+
XML_OPTION_SKIP_TAGSTART bounds
3+
--EXTENSIONS--
4+
xml
5+
--FILE--
6+
<?php
7+
$sample = "<?xml version=\"1.0\"?><test><child/></test>";
8+
$parser = xml_parser_create();
9+
xml_parser_set_option($parser, XML_OPTION_SKIP_TAGSTART, 100);
10+
$res = xml_parse_into_struct($parser,$sample,$vals,$index);
11+
var_dump($vals);
12+
?>
13+
--EXPECT--
14+
array(3) {
15+
[0]=>
16+
array(3) {
17+
["tag"]=>
18+
string(0) ""
19+
["type"]=>
20+
string(4) "open"
21+
["level"]=>
22+
int(1)
23+
}
24+
[1]=>
25+
array(3) {
26+
["tag"]=>
27+
string(0) ""
28+
["type"]=>
29+
string(8) "complete"
30+
["level"]=>
31+
int(2)
32+
}
33+
[2]=>
34+
array(3) {
35+
["tag"]=>
36+
string(0) ""
37+
["type"]=>
38+
string(5) "close"
39+
["level"]=>
40+
int(1)
41+
}
42+
}

ext/xml/xml.c

+8-4
Original file line numberDiff line numberDiff line change
@@ -636,9 +636,11 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
636636
array_init(&tag);
637637
array_init(&atr);
638638

639-
_xml_add_to_info(parser, ZSTR_VAL(tag_name) + parser->toffset);
639+
char *skipped_tag_name = SKIP_TAGSTART(ZSTR_VAL(tag_name));
640640

641-
add_assoc_string(&tag, "tag", SKIP_TAGSTART(ZSTR_VAL(tag_name))); /* cast to avoid gcc-warning */
641+
_xml_add_to_info(parser, skipped_tag_name);
642+
643+
add_assoc_string(&tag, "tag", skipped_tag_name);
642644
add_assoc_string(&tag, "type", "open");
643645
add_assoc_long(&tag, "level", parser->level);
644646

@@ -707,9 +709,11 @@ void _xml_endElementHandler(void *userData, const XML_Char *name)
707709
} else {
708710
array_init(&tag);
709711

710-
_xml_add_to_info(parser, ZSTR_VAL(tag_name) + parser->toffset);
712+
char *skipped_tag_name = SKIP_TAGSTART(ZSTR_VAL(tag_name));
713+
714+
_xml_add_to_info(parser, skipped_tag_name);
711715

712-
add_assoc_string(&tag, "tag", SKIP_TAGSTART(ZSTR_VAL(tag_name))); /* cast to avoid gcc-warning */
716+
add_assoc_string(&tag, "tag", skipped_tag_name);
713717
add_assoc_string(&tag, "type", "close");
714718
add_assoc_long(&tag, "level", parser->level);
715719

0 commit comments

Comments
 (0)