Skip to content

Commit b13745e

Browse files
Update xml_*_handler signature (#4254)
1 parent e821ab7 commit b13745e

File tree

3 files changed

+53
-9
lines changed

3 files changed

+53
-9
lines changed

resources/functionMap.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11677,16 +11677,16 @@
1167711677
'xml_parser_free' => ['bool', 'parser'=>'resource'],
1167811678
'xml_parser_get_option' => ['mixed', 'parser'=>'resource', 'option'=>'int'],
1167911679
'xml_parser_set_option' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'mixed'],
11680-
'xml_set_character_data_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11681-
'xml_set_default_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11682-
'xml_set_element_handler' => ['bool', 'parser'=>'resource', 'shdl'=>'callable', 'ehdl'=>'callable'],
11683-
'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11684-
'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11685-
'xml_set_notation_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11680+
'xml_set_character_data_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
11681+
'xml_set_default_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
11682+
'xml_set_element_handler' => ['bool', 'parser'=>'resource', 'shdl'=>'callable|string|null', 'ehdl'=>'callable|string|null'],
11683+
'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
11684+
'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
11685+
'xml_set_notation_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
1168611686
'xml_set_object' => ['bool', 'parser'=>'resource', 'obj'=>'object'],
11687-
'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11688-
'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11689-
'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable'],
11687+
'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
11688+
'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
11689+
'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'resource', 'hdl'=>'callable|string|null'],
1169011690
'XMLDiff\Base::__construct' => ['void', 'nsname'=>'string'],
1169111691
'XMLDiff\Base::diff' => ['mixed', 'from'=>'mixed', 'to'=>'mixed'],
1169211692
'XMLDiff\Base::merge' => ['mixed', 'src'=>'mixed', 'diff'=>'mixed'],

tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2295,6 +2295,11 @@ public function testBug5760(): void
22952295
]);
22962296
}
22972297

2298+
public function testBug9970(): void
2299+
{
2300+
$this->analyse([__DIR__ . '/data/bug-9970.php'], []);
2301+
}
2302+
22982303
#[RequiresPhp('>= 8.0')]
22992304
public function testBug12317(): void
23002305
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace Bug9970;
4+
5+
class XML_Parser
6+
{
7+
public $dummy = "a";
8+
9+
function parse($data)
10+
{
11+
$parser = xml_parser_create();
12+
13+
xml_set_object($parser, $this);
14+
15+
xml_set_element_handler($parser, 'startHandler', 'endHandler');
16+
17+
xml_parse($parser, $data, true);
18+
19+
xml_parser_free($parser);
20+
}
21+
22+
function startHandler($XmlParser, $tag, $attr)
23+
{
24+
$this->dummy = "b";
25+
throw new \Exception("ex");
26+
}
27+
28+
function endHandler($XmlParser, $tag)
29+
{
30+
}
31+
}
32+
33+
$p1 = new Xml_Parser();
34+
try {
35+
$p1->parse('<tag1><tag2></tag2></tag1>');
36+
echo "Exception swallowed\n";
37+
} catch (\Exception $e) {
38+
echo "OK\n";
39+
}

0 commit comments

Comments
 (0)