Skip to content

Commit 1f84f5c

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix GH-16292: Segmentation fault in ext/xmlreader/php_xmlreader.c:1282
2 parents 3bb06bc + 54eab7b commit 1f84f5c

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

NEWS

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.4.0RC3
44

5+
- XMLReader:
6+
. Fixed bug GH-16292 (Segmentation fault in ext/xmlreader/php_xmlreader.c).
7+
(nielsdos)
8+
59
10 Oct 2024, PHP 8.4.0RC2
610

711
- CGI:

ext/dom/xml_common.h

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

ext/xmlreader/php_xmlreader.c

+7-1
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,13 @@ PHP_METHOD(XMLReader, expand)
12791279
}
12801280

12811281
if (basenode != NULL) {
1282-
NODE_GET_OBJ(node, basenode, xmlNodePtr, domobj);
1282+
/* Note: cannot use NODE_GET_OBJ here because of the wrong return type */
1283+
domobj = Z_LIBXML_NODE_P(basenode);
1284+
if (UNEXPECTED(domobj->node == NULL)) {
1285+
php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(Z_OBJCE_P(basenode)->name));
1286+
RETURN_FALSE;
1287+
}
1288+
node = domobj->node->node;
12831289
docp = node->doc;
12841290
}
12851291

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)