Commit 087a5e73f43 for php
commit 087a5e73f4387a96be5d12d4ec4ee0fcd395c172
Merge: 268ebcbead3 7302ff4f529
Author: Ilia Alshanetsky <ilia@ilia.ws>
Date: Tue Nov 10 08:37:48 2026 -0500
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
ext/dba: Fix dba_close() not closing a dba_popen() connection
diff --cc NEWS
index 1f5d866be56,0896086c19e..c246c61d67e
--- a/NEWS
+++ b/NEWS
@@@ -25,6 -25,14 +25,10 @@@ PH
- Curl:
. Fixed curl_reset() retaining CURLOPT_PRIVATE after reset. (lacatoire)
+ - DBA:
+ . Fixed dba_close() not closing a database opened with dba_popen().
+ (Ilia Alshanetsky)
+
-- DOM:
- . Fixed bug GH-25268 (NULL php_libxml_ref_obj dereference in
- dom_objects_store_clone_obj when cloning Dom\Notation). (David Carlier)
-
- MBString:
. Fixed stack overflow in mb_check_encoding() and mb_convert_encoding() with
deeply nested arrays. (Eyüp Can Akman)
diff --cc ext/dba/dba.c
index 60685474212,b64fdc2ce40..ca8f961f068
--- a/ext/dba/dba.c
+++ b/ext/dba/dba.c
@@@ -587,12 -620,13 +617,13 @@@ static void php_dba_open(INTERNAL_FUNCT
zend_resource *le;
/* try to find if we already have this link in our persistent list */
- if ((le = zend_hash_str_find_ptr(&EG(persistent_list), resource_key, resource_key_len)) != NULL) {
+ if ((le = zend_hash_find_ptr(&EG(persistent_list), resource_key)) != NULL) {
if (le->type != le_pdb) {
// TODO This should never happen
- efree(resource_key);
+ zend_string_release_ex(resource_key, /* persistent */ false);
RETURN_FALSE;
}
+ GC_ADDREF(le);
object_init_ex(return_value, dba_connection_ce);
dba_connection *connection = Z_DBA_CONNECTION_P(return_value);
@@@ -944,9 -982,10 +975,10 @@@ restart
connection->info->hnd = hptr;
if (persistent) {
- if (zend_register_persistent_resource_ex(connection->hash, connection->info, le_pdb) == NULL) {
- zend_resource *le = zend_register_persistent_resource(resource_key, resource_key_len, connection->info, le_pdb);
++ zend_resource *le = zend_register_persistent_resource_ex(connection->hash, connection->info, le_pdb);
+ if (le == NULL) {
php_error_docref(NULL, E_WARNING, "Could not register persistent resource");
- efree(resource_key);
+ zend_string_release_ex(resource_key, /* persistent */ false);
dba_close_connection(connection);
zval_ptr_dtor(return_value);
RETURN_FALSE;