Skip to content

Commit b6f786a

Browse files
committed
Merge branch 'PHP-8.5'
* PHP-8.5: Fix GH-20722: Null pointer dereference in DOM namespace node cloning via clone on malformed objects
2 parents cf62b6c + 735f354 commit b6f786a

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

ext/dom/php_dom.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -714,15 +714,17 @@ static zend_object *dom_object_namespace_node_clone_obj(zend_object *zobject)
714714
zend_object *clone = dom_objects_namespace_node_new(intern->dom.std.ce);
715715
dom_object_namespace_node *clone_intern = php_dom_namespace_node_obj_from_obj(clone);
716716

717-
xmlNodePtr original_node = dom_object_get_node(&intern->dom);
718-
ZEND_ASSERT(original_node->type == XML_NAMESPACE_DECL);
719-
xmlNodePtr cloned_node = php_dom_create_fake_namespace_decl_node_ptr(original_node->parent, original_node->ns);
720-
721717
if (intern->parent_intern) {
722718
clone_intern->parent_intern = intern->parent_intern;
723719
GC_ADDREF(&clone_intern->parent_intern->std);
724720
}
725-
dom_update_refcount_after_clone(&intern->dom, original_node, &clone_intern->dom, cloned_node);
721+
722+
xmlNodePtr original_node = dom_object_get_node(&intern->dom);
723+
if (original_node != NULL) {
724+
ZEND_ASSERT(original_node->type == XML_NAMESPACE_DECL);
725+
xmlNodePtr cloned_node = php_dom_create_fake_namespace_decl_node_ptr(original_node->parent, original_node->ns);
726+
dom_update_refcount_after_clone(&intern->dom, original_node, &clone_intern->dom, cloned_node);
727+
}
726728

727729
zend_objects_clone_members(clone, &intern->dom.std);
728730
return clone;

ext/dom/tests/gh20722.phpt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
GH-20722 (Null pointer dereference in DOM namespace node cloning via clone on malformed objects)
3+
--EXTENSIONS--
4+
dom
5+
--FILE--
6+
<?php
7+
8+
clone new DOMNameSpaceNode();
9+
echo "Done";
10+
11+
?>
12+
--EXPECT--
13+
Done

0 commit comments

Comments
 (0)