Skip to content

Commit 0d1d905

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16039: Segmentation fault (access null pointer) in ext/dom/parentnode/tree.c
2 parents 2c3c238 + 9754674 commit 0d1d905

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

ext/dom/parentnode/tree.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,11 @@ xmlNode* dom_zvals_to_single_node(php_libxml_ref_obj *document, xmlNode *context
379379
newNodeObj = Z_DOMOBJ_P(&nodes[i]);
380380
newNode = dom_object_get_node(newNodeObj);
381381

382+
if (UNEXPECTED(!newNode)) {
383+
php_dom_throw_error(INVALID_STATE_ERR, /* strict */ true);
384+
goto err;
385+
}
386+
382387
if (!dom_is_pre_insert_valid_without_step_1(document, node, newNode, NULL, documentNode)) {
383388
goto err;
384389
}

ext/dom/tests/gh16039.phpt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--TEST--
2+
GH-16039 (Segmentation fault (access null pointer) in ext/dom/parentnode/tree.c)
3+
--EXTENSIONS--
4+
dom
5+
--FILE--
6+
<?php
7+
8+
$dom = new DOMDocument;
9+
$element = $dom->appendChild($dom->createElement('root'));
10+
try {
11+
$element->prepend('x', new DOMEntity);
12+
} catch (DOMException $e) {
13+
echo $e->getMessage(), "\n";
14+
}
15+
echo $dom->saveXML();
16+
$dom->strictErrorChecking = false; // Should not have influence
17+
try {
18+
$element->prepend('x', new DOMEntity);
19+
} catch (DOMException $e) {
20+
echo $e->getMessage(), "\n";
21+
}
22+
echo $dom->saveXML();
23+
24+
?>
25+
--EXPECT--
26+
Invalid State Error
27+
<?xml version="1.0"?>
28+
<root/>
29+
Invalid State Error
30+
<?xml version="1.0"?>
31+
<root/>

0 commit comments

Comments
 (0)