Skip to content

Commit 54eab7b

Browse files
committed
Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2: Fix GH-16292: Segmentation fault in ext/xmlreader/php_xmlreader.c:1282
2 parents 6f868bd + 5c12493 commit 54eab7b

File tree

4 files changed

+37
-2
lines changed

4 files changed

+37
-2
lines changed

NEWS

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.3.14
44

5+
- XMLReader:
6+
. Fixed bug GH-16292 (Segmentation fault in ext/xmlreader/php_xmlreader.c).
7+
(nielsdos)
58

69
24 Oct 2024, PHP 8.3.13
710

ext/dom/xml_common.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj);
6363
__intern = Z_LIBXML_NODE_P(__id); \
6464
if (UNEXPECTED(__intern->node == NULL)) { \
6565
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", \
66-
ZSTR_VAL(__intern->std.ce->name));\
66+
ZSTR_VAL(Z_OBJCE_P(__zv)->name));\
6767
RETURN_NULL();\
6868
} \
6969
__ptr = (__prtype)__intern->node->node; \

ext/xmlreader/php_xmlreader.c

+7-1
Original file line numberDiff line numberDiff line change
@@ -1121,7 +1121,13 @@ PHP_METHOD(XMLReader, expand)
11211121
}
11221122

11231123
if (basenode != NULL) {
1124-
NODE_GET_OBJ(node, basenode, xmlNodePtr, domobj);
1124+
/* Note: cannot use NODE_GET_OBJ here because of the wrong return type */
1125+
domobj = Z_LIBXML_NODE_P(basenode);
1126+
if (UNEXPECTED(domobj->node == NULL)) {
1127+
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(Z_OBJCE_P(basenode)->name));
1128+
RETURN_FALSE;
1129+
}
1130+
node = domobj->node->node;
11251131
docp = node->doc;
11261132
}
11271133

ext/xmlreader/tests/gh16292.phpt

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
GH-16292 (Segmentation fault in ext/xmlreader/php_xmlreader.c:1282)
3+
--EXTENSIONS--
4+
dom
5+
xmlreader
6+
--FILE--
7+
<?php
8+
9+
$character_data = new DOMCharacterData();
10+
$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
11+
<books><book>new book</book></books>';
12+
$reader = new XMLReader();
13+
$reader->XML($xmlstring);
14+
while ($reader->read()) {
15+
if ($reader->localName == "book") {
16+
var_dump($reader->expand($character_data));
17+
}
18+
}
19+
20+
?>
21+
--EXPECTF--
22+
Warning: XMLReader::expand(): Couldn't fetch DOMCharacterData in %s on line %d
23+
bool(false)
24+
25+
Warning: XMLReader::expand(): Couldn't fetch DOMCharacterData in %s on line %d
26+
bool(false)

0 commit comments

Comments
 (0)