Skip to content

Commit 6b54811

Browse files
committed
Merge branch 'PHP-8.3'
* PHP-8.3: Fix #52751: XPath processing-instruction() function is not supported.
2 parents 038e9b7 + 2440af0 commit 6b54811

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

ext/simplexml/simplexml.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1308,7 +1308,7 @@ PHP_METHOD(SimpleXMLElement, xpath)
13081308

13091309
for (i = 0; i < result->nodeNr; ++i) {
13101310
nodeptr = result->nodeTab[i];
1311-
if (nodeptr->type == XML_TEXT_NODE || nodeptr->type == XML_ELEMENT_NODE || nodeptr->type == XML_ATTRIBUTE_NODE) {
1311+
if (nodeptr->type == XML_TEXT_NODE || nodeptr->type == XML_ELEMENT_NODE || nodeptr->type == XML_ATTRIBUTE_NODE || nodeptr->type == XML_PI_NODE) {
13121312
/**
13131313
* Detect the case where the last selector is text(), simplexml
13141314
* always accesses the text() child by default, therefore we assign

ext/simplexml/tests/bug52751.phpt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
--TEST--
2+
Bug #52751 (XPath processing-instruction() function is not supported)
3+
--EXTENSIONS--
4+
simplexml
5+
--FILE--
6+
<?php
7+
8+
$xml = <<<XML
9+
<?xml version="1.0" encoding="utf-8"?>
10+
<foo>
11+
<bar>text node</bar>
12+
<bar><?baz href="ftw" ?></bar>
13+
<bar><?foo bar ?></bar>
14+
</foo>
15+
XML;
16+
17+
$sxe = simplexml_load_string($xml);
18+
19+
var_dump(
20+
$sxe->xpath('//bar')
21+
);
22+
23+
var_dump(
24+
$sxe->xpath('//processing-instruction(\'baz\')')
25+
);
26+
27+
foreach ($sxe->xpath('//processing-instruction()') as $pi) {
28+
var_dump($pi->getName());
29+
}
30+
31+
?>
32+
--EXPECT--
33+
array(3) {
34+
[0]=>
35+
object(SimpleXMLElement)#2 (1) {
36+
[0]=>
37+
string(9) "text node"
38+
}
39+
[1]=>
40+
object(SimpleXMLElement)#3 (1) {
41+
["baz"]=>
42+
object(SimpleXMLElement)#5 (0) {
43+
}
44+
}
45+
[2]=>
46+
object(SimpleXMLElement)#4 (1) {
47+
["foo"]=>
48+
object(SimpleXMLElement)#5 (0) {
49+
}
50+
}
51+
}
52+
array(1) {
53+
[0]=>
54+
object(SimpleXMLElement)#4 (0) {
55+
}
56+
}
57+
string(3) "baz"
58+
string(3) "foo"

0 commit comments

Comments
 (0)