Skip to content

Commit 9754674

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix GH-16039: Segmentation fault (access null pointer) in ext/dom/parentnode/tree.c
2 parents 6946bbc + 68d494d commit 9754674

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.4.0RC2
44

5+
- DOM:
6+
. Fixed bug GH-16039 (Segmentation fault (access null pointer) in
7+
ext/dom/parentnode/tree.c). (nielsdos)
8+
59
- Opcache:
610
. Fixed bug GH-16009 (Segmentation fault with frameless functions and
711
undefined CVs). (nielsdos)

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)