From 31d3875d15d4c445c44e82ad82e831aeba87740f Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Fri, 5 Jun 2026 11:54:13 +0530 Subject: [PATCH 1/4] ext/dba: switch dba_handlers full_info path to zend_string API --- ext/dba/dba.c | 6 ++---- ext/dba/dba_cdb.c | 9 ++++++--- ext/dba/dba_db1.c | 2 +- ext/dba/dba_db2.c | 2 +- ext/dba/dba_db3.c | 2 +- ext/dba/dba_db4.c | 2 +- ext/dba/dba_dbm.c | 2 +- ext/dba/dba_flatfile.c | 5 +++-- ext/dba/dba_inifile.c | 3 ++- ext/dba/dba_lmdb.c | 2 +- ext/dba/dba_ndbm.c | 2 +- ext/dba/dba_qdbm.c | 2 +- ext/dba/dba_tcadb.c | 2 +- ext/dba/php_dba.h | 4 ++-- 14 files changed, 24 insertions(+), 21 deletions(-) diff --git a/ext/dba/dba.c b/ext/dba/dba.c index c0688714fe7c..06f7c2ff0e16 100644 --- a/ext/dba/dba.c +++ b/ext/dba/dba.c @@ -1282,10 +1282,8 @@ PHP_FUNCTION(dba_handlers) for (const dba_handler *hptr = handler; hptr->name; hptr++) { if (full_info) { - // TODO: avoid reallocation ??? - char *str = hptr->info(hptr, NULL); - add_assoc_string(return_value, hptr->name, str); - efree(str); + zend_string *str = hptr->info(hptr, NULL); + add_assoc_str(return_value, hptr->name, str); } else { add_next_index_string(return_value, hptr->name); } diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c index 79b60c765c37..e339d9aa40a0 100644 --- a/ext/dba/dba_cdb.c +++ b/ext/dba/dba_cdb.c @@ -318,13 +318,16 @@ DBA_SYNC_FUNC(cdb) DBA_INFO_FUNC(cdb) { #ifdef DBA_CDB_BUILTIN + char* version_str = NULL; if (!strcmp(hnd->name, "cdb")) { - return estrdup(cdb_version()); + version_str = cdb_version(); + return zend_string_init(cdb_version, strlen(cdb_version), false); } else { - return estrdup(cdb_make_version()); + version_str = cdb_make_version(); + return zend_string_init(cdb_version, strlen(cdb_version), false); } #else - return estrdup("External"); + return zend_string_init("External", strlen("External"), false); #endif } diff --git a/ext/dba/dba_db1.c b/ext/dba/dba_db1.c index dfcd637c8f87..27d66ae3a235 100644 --- a/ext/dba/dba_db1.c +++ b/ext/dba/dba_db1.c @@ -177,7 +177,7 @@ DBA_SYNC_FUNC(db1) DBA_INFO_FUNC(db1) { - return estrdup(DB1_VERSION); + return zend_string_init(DB1_VERSION, strlen(DB1_VERSION), false); } #endif diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c index dd723ea40af8..1348eadaf68d 100644 --- a/ext/dba/dba_db2.c +++ b/ext/dba/dba_db2.c @@ -187,7 +187,7 @@ DBA_SYNC_FUNC(db2) DBA_INFO_FUNC(db2) { - return estrdup(DB_VERSION_STRING); + return zend_string_init(DB_VERSION_STRING, strlen(DB_VERSION_STRING), false); } #endif diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c index aacc65dda5a5..8748c73cae5b 100644 --- a/ext/dba/dba_db3.c +++ b/ext/dba/dba_db3.c @@ -225,7 +225,7 @@ DBA_SYNC_FUNC(db3) DBA_INFO_FUNC(db3) { - return estrdup(DB_VERSION_STRING); + return zend_string_init(DB_VERSION_STRING, strlen(DB_VERSION_STRING), false); } #endif diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c index 16ac9be37a13..854b289baafc 100644 --- a/ext/dba/dba_db4.c +++ b/ext/dba/dba_db4.c @@ -282,7 +282,7 @@ DBA_SYNC_FUNC(db4) DBA_INFO_FUNC(db4) { - return estrdup(DB_VERSION_STRING); + return zend_string_init(DB_VERSION_STRING, strlen(DB_VERSION_STRING), false); } #endif diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c index 9579444454ce..dc6b2dc6ce7b 100644 --- a/ext/dba/dba_dbm.c +++ b/ext/dba/dba_dbm.c @@ -192,7 +192,7 @@ DBA_INFO_FUNC(dbm) return dba_info_gdbm(hnd, info); } #endif - return estrdup(DBM_VERSION); + return zend_string_init(DBM_VERSION, strlen(DBM_VERSION), false); } #endif diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c index 4208277a920d..28e4b73cf55f 100644 --- a/ext/dba/dba_flatfile.c +++ b/ext/dba/dba_flatfile.c @@ -166,8 +166,9 @@ DBA_SYNC_FUNC(flatfile) } DBA_INFO_FUNC(flatfile) -{ - return estrdup(flatfile_version()); +{ + char* version = flatfile_version(); + return zend_string_init(version, strlen(version), false); } #endif diff --git a/ext/dba/dba_inifile.c b/ext/dba/dba_inifile.c index 1539bb0496dd..1d5703ad6bbe 100644 --- a/ext/dba/dba_inifile.c +++ b/ext/dba/dba_inifile.c @@ -186,7 +186,8 @@ DBA_SYNC_FUNC(inifile) DBA_INFO_FUNC(inifile) { - return estrdup(inifile_version()); + const char* version = inifile_version(); + return zend_string_init(version, strlen(version), false); } #endif diff --git a/ext/dba/dba_lmdb.c b/ext/dba/dba_lmdb.c index 57e74f320239..de2632adf5ae 100644 --- a/ext/dba/dba_lmdb.c +++ b/ext/dba/dba_lmdb.c @@ -360,7 +360,7 @@ DBA_SYNC_FUNC(lmdb) DBA_INFO_FUNC(lmdb) { - return estrdup(MDB_VERSION_STRING); + return zend_string_init(MDB_VERSION_STRING, strlen(MDB_VERSION_STRING), false); } #endif diff --git a/ext/dba/dba_ndbm.c b/ext/dba/dba_ndbm.c index 2b4002591e91..6518a78efb71 100644 --- a/ext/dba/dba_ndbm.c +++ b/ext/dba/dba_ndbm.c @@ -147,7 +147,7 @@ DBA_SYNC_FUNC(ndbm) DBA_INFO_FUNC(ndbm) { - return estrdup("NDBM"); + return zend_string_init(NDBM, strlen(NDBM), false); } #endif diff --git a/ext/dba/dba_qdbm.c b/ext/dba/dba_qdbm.c index 8e692b7e55bc..c50de9de20a5 100644 --- a/ext/dba/dba_qdbm.c +++ b/ext/dba/dba_qdbm.c @@ -173,7 +173,7 @@ DBA_SYNC_FUNC(qdbm) DBA_INFO_FUNC(qdbm) { - return estrdup(dpversion); + return zend_string_init(dpversion, strlen(dpversion), false); } #endif diff --git a/ext/dba/dba_tcadb.c b/ext/dba/dba_tcadb.c index 0539a7036602..30d591184129 100644 --- a/ext/dba/dba_tcadb.c +++ b/ext/dba/dba_tcadb.c @@ -193,7 +193,7 @@ DBA_SYNC_FUNC(tcadb) DBA_INFO_FUNC(tcadb) { - return estrdup(tcversion); + return zend_string_init(tcversion, strlen(tcversion), false);; } #endif diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h index 86c8a4f0ed65..89fac865bf28 100644 --- a/ext/dba/php_dba.h +++ b/ext/dba/php_dba.h @@ -89,7 +89,7 @@ typedef struct dba_handler { zend_string* (*nextkey)(dba_info *); zend_result (*optimize)(dba_info *); zend_result (*sync)(dba_info *); - char* (*info)(const struct dba_handler *hnd, dba_info *); + zend_string* (*info)(const struct dba_handler *hnd, dba_info *); /* dba_info==NULL: Handler info, dba_info!=NULL: Database info */ } dba_handler; @@ -116,7 +116,7 @@ typedef struct dba_handler { #define DBA_SYNC_FUNC(x) \ zend_result dba_sync_##x(dba_info *info) #define DBA_INFO_FUNC(x) \ - char *dba_info_##x(const dba_handler *hnd, dba_info *info) + zend_string *dba_info_##x(const dba_handler *hnd, dba_info *info) #define DBA_FUNCS(x) \ DBA_OPEN_FUNC(x); \ From 815c9d4bfbcc764fdd86094a89a8891468cff4ff Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Fri, 5 Jun 2026 12:36:19 +0530 Subject: [PATCH 2/4] ext/dba: switch dba_handlers full_info path to zend_string API --- ext/dba/dba_cdb.c | 5 ++--- ext/dba/dba_gdbm.c | 2 +- ext/dba/dba_tcadb.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c index e339d9aa40a0..3b9a1d25d444 100644 --- a/ext/dba/dba_cdb.c +++ b/ext/dba/dba_cdb.c @@ -318,14 +318,13 @@ DBA_SYNC_FUNC(cdb) DBA_INFO_FUNC(cdb) { #ifdef DBA_CDB_BUILTIN - char* version_str = NULL; + const char* version_str = NULL; if (!strcmp(hnd->name, "cdb")) { version_str = cdb_version(); - return zend_string_init(cdb_version, strlen(cdb_version), false); } else { version_str = cdb_make_version(); - return zend_string_init(cdb_version, strlen(cdb_version), false); } + return zend_string_init(cdb_version, strlen(cdb_version), false); #else return zend_string_init("External", strlen("External"), false); #endif diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c index 961f539a451f..b4bee21d3a20 100644 --- a/ext/dba/dba_gdbm.c +++ b/ext/dba/dba_gdbm.c @@ -189,7 +189,7 @@ DBA_SYNC_FUNC(gdbm) DBA_INFO_FUNC(gdbm) { - return estrdup(gdbm_version); + return zend_string_init(gdbm_version, strlen(gdbm_version), false); } #endif diff --git a/ext/dba/dba_tcadb.c b/ext/dba/dba_tcadb.c index 30d591184129..3cae24fee427 100644 --- a/ext/dba/dba_tcadb.c +++ b/ext/dba/dba_tcadb.c @@ -193,7 +193,7 @@ DBA_SYNC_FUNC(tcadb) DBA_INFO_FUNC(tcadb) { - return zend_string_init(tcversion, strlen(tcversion), false);; + return zend_string_init(tcversion, strlen(tcversion), false); } #endif From 4fffd897c990b0877baea2af0ce6f416da08b2d9 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Fri, 5 Jun 2026 12:41:52 +0530 Subject: [PATCH 3/4] ext/dba: switch dba_handlers full_info path to zend_string API --- ext/dba/dba_cdb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c index 3b9a1d25d444..e0c978f74616 100644 --- a/ext/dba/dba_cdb.c +++ b/ext/dba/dba_cdb.c @@ -318,11 +318,11 @@ DBA_SYNC_FUNC(cdb) DBA_INFO_FUNC(cdb) { #ifdef DBA_CDB_BUILTIN - const char* version_str = NULL; + char* version_str = NULL; if (!strcmp(hnd->name, "cdb")) { - version_str = cdb_version(); + version_str = (char*)cdb_version(); } else { - version_str = cdb_make_version(); + version_str = (char*)cdb_make_version(); } return zend_string_init(cdb_version, strlen(cdb_version), false); #else From ef6fff30bbcea981920e1caf1ea61e2eddbedddb Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Fri, 5 Jun 2026 13:49:15 +0530 Subject: [PATCH 4/4] ext/dba: switch dba_handlers full_info path to zend_string API --- ext/dba/dba_cdb.c | 12 +++++++----- ext/dba/dba_dbm.c | 2 +- ext/dba/dba_flatfile.c | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c index e0c978f74616..1cad3eb9b544 100644 --- a/ext/dba/dba_cdb.c +++ b/ext/dba/dba_cdb.c @@ -318,15 +318,17 @@ DBA_SYNC_FUNC(cdb) DBA_INFO_FUNC(cdb) { #ifdef DBA_CDB_BUILTIN - char* version_str = NULL; + const char *version_str; + if (!strcmp(hnd->name, "cdb")) { - version_str = (char*)cdb_version(); + version_str = cdb_version(); } else { - version_str = (char*)cdb_make_version(); + version_str = cdb_make_version(); } - return zend_string_init(cdb_version, strlen(cdb_version), false); + + return zend_string_init(version_str, strlen(version_str), 0); #else - return zend_string_init("External", strlen("External"), false); + return zend_string_init("External", sizeof("External") - 1, 0); #endif } diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c index dc6b2dc6ce7b..6629fe599700 100644 --- a/ext/dba/dba_dbm.c +++ b/ext/dba/dba_dbm.c @@ -188,7 +188,7 @@ DBA_INFO_FUNC(dbm) { #ifdef DBA_GDBM if (!strcmp(DBM_VERSION, "GDBM")) - { + { return dba_info_gdbm(hnd, info); } #endif diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c index 28e4b73cf55f..41e73caf346b 100644 --- a/ext/dba/dba_flatfile.c +++ b/ext/dba/dba_flatfile.c @@ -167,7 +167,7 @@ DBA_SYNC_FUNC(flatfile) DBA_INFO_FUNC(flatfile) { - char* version = flatfile_version(); + const char* version = flatfile_version(); return zend_string_init(version, strlen(version), false); }