Fix GH-16316: DOMXPath breaks when not initialized properly

Closes GH-16330.
This commit is contained in:
Niels Dossche 2024-10-09 18:11:22 +02:00
parent 509fec8ee6
commit 1d0fbdf449
No known key found for this signature in database
GPG key ID: B8A8AD166DF0E2E5
3 changed files with 41 additions and 0 deletions

4
NEWS
View file

@ -9,6 +9,10 @@ PHP NEWS
. Fixed bug GH-16302 (CurlMultiHandle holds a reference to CurlHandle if . Fixed bug GH-16302 (CurlMultiHandle holds a reference to CurlHandle if
curl_multi_add_handle fails). (timwolla) curl_multi_add_handle fails). (timwolla)
- DOM:
. Fixed bug GH-16316 (DOMXPath breaks when not initialized properly).
(nielsdos)
- PHPDBG: - PHPDBG:
. Fixed bug GH-16174 (Empty string is an invalid expression for ev). (cmb) . Fixed bug GH-16174 (Empty string is an invalid expression for ev). (cmb)

View file

@ -0,0 +1,32 @@
--TEST--
GH-16316 (DOMXPath breaks when not initialized properly)
--EXTENSIONS--
dom
--FILE--
<?php
class Demo extends DOMXPath {
public function __construct() {}
}
$demo = new Demo;
try {
var_dump($demo);
} catch (DOMException $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump($demo->document);
} catch (DOMException $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
object(Demo)#1 (1) {
["registerNodeNamespaces"]=>
bool(true)
}
Invalid State Error
Invalid State Error

View file

@ -264,6 +264,11 @@ int dom_xpath_document_read(dom_object *obj, zval *retval)
docp = (xmlDocPtr) ctx->doc; docp = (xmlDocPtr) ctx->doc;
} }
if (UNEXPECTED(!docp)) {
php_dom_throw_error(INVALID_STATE_ERR, /* strict */ true);
return FAILURE;
}
php_dom_create_object((xmlNodePtr) docp, retval, obj); php_dom_create_object((xmlNodePtr) docp, retval, obj);
return SUCCESS; return SUCCESS;
} }