Commit ce1d7873a58 for php.net
commit ce1d7873a58b0672971e8a50462daae7859cabda
Author: Gina Peter Banyard <girgias@php.net>
Date: Thu Jul 2 12:03:35 2026 +0100
ext/dba: prevent reallocation for info function (#22546)
There is no need to duplicate the strings as they are all `const char*` pointers.
Thus, just change the handle to return `const char*`
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
index c0688714fe7..a9114753a8a 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);
+ const char *str = hptr->info(hptr, NULL);
add_assoc_string(return_value, hptr->name, str);
- efree(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 79b60c765c3..3578866b546 100644
--- a/ext/dba/dba_cdb.c
+++ b/ext/dba/dba_cdb.c
@@ -319,12 +319,12 @@ DBA_INFO_FUNC(cdb)
{
#ifdef DBA_CDB_BUILTIN
if (!strcmp(hnd->name, "cdb")) {
- return estrdup(cdb_version());
+ return cdb_version();
} else {
- return estrdup(cdb_make_version());
+ return cdb_make_version();
}
#else
- return estrdup("External");
+ return "External";
#endif
}
diff --git a/ext/dba/dba_db1.c b/ext/dba/dba_db1.c
index dfcd637c8f8..59846c90a4c 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 DB1_VERSION;
}
#endif
diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c
index dd723ea40af..50893d8458c 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 DB_VERSION_STRING;
}
#endif
diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c
index aacc65dda5a..d4111e8c41f 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 DB_VERSION_STRING;
}
#endif
diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c
index 16ac9be37a1..fbd5f8191b4 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 DB_VERSION_STRING;
}
#endif
diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c
index 9579444454c..73f137e9891 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 DBM_VERSION;
}
#endif
diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c
index 4208277a920..5e8bae223f9 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)
{
- return estrdup(flatfile_version());
+ return flatfile_version();
}
#endif
diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c
index 961f539a451..64877eb289c 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 gdbm_version;
}
#endif
diff --git a/ext/dba/dba_inifile.c b/ext/dba/dba_inifile.c
index 1539bb0496d..bf5ef322759 100644
--- a/ext/dba/dba_inifile.c
+++ b/ext/dba/dba_inifile.c
@@ -186,7 +186,7 @@ DBA_SYNC_FUNC(inifile)
DBA_INFO_FUNC(inifile)
{
- return estrdup(inifile_version());
+ return inifile_version();
}
#endif
diff --git a/ext/dba/dba_lmdb.c b/ext/dba/dba_lmdb.c
index 57e74f32023..6e6a78ad5e2 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 MDB_VERSION_STRING;
}
#endif
diff --git a/ext/dba/dba_ndbm.c b/ext/dba/dba_ndbm.c
index 2b4002591e9..c60ab7e5f42 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 "NDBM";
}
#endif
diff --git a/ext/dba/dba_qdbm.c b/ext/dba/dba_qdbm.c
index 8e692b7e55b..cc97cd9757f 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 dpversion;
}
#endif
diff --git a/ext/dba/dba_tcadb.c b/ext/dba/dba_tcadb.c
index 0539a703660..5f4ed5eeabd 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 tcversion;
}
#endif
diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h
index 86c8a4f0ed6..38ad3ea2820 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 *);
+ const char* (*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)
+ const char *dba_info_##x(const dba_handler *hnd, dba_info *info)
#define DBA_FUNCS(x) \
DBA_OPEN_FUNC(x); \