[php-src] master: ext/dba: prevent reallocation for info function (#22546)

Gina Peter Banyard via GitHub <[email protected]>
Newsgroups gmane.comp.php.cvs.general
Message-ID <[email protected]>
Author: Gina Peter Banyard (Girgias)
Committer: GitHub (web-flow)
Pusher: Girgias
Date: 2026-07-02T12:03:35+01:00

Commit: https://github.com/php/php-src/commit/ce1d7873a58b0672971e8a50462daae7859cabda
Raw diff: https://github.com/php/php-src/commit/ce1d7873a58b0672971e8a50462daae7859cabda.diff

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*`

Changed paths:
  M  ext/dba/dba.c
  M  ext/dba/dba_cdb.c
  M  ext/dba/dba_db1.c
  M  ext/dba/dba_db2.c
  M  ext/dba/dba_db3.c
  M  ext/dba/dba_db4.c
  M  ext/dba/dba_dbm.c
  M  ext/dba/dba_flatfile.c
  M  ext/dba/dba_gdbm.c
  M  ext/dba/dba_inifile.c
  M  ext/dba/dba_lmdb.c
  M  ext/dba/dba_ndbm.c
  M  ext/dba/dba_qdbm.c
  M  ext/dba/dba_tcadb.c
  M  ext/dba/php_dba.h


Diff:

diff --git a/ext/dba/dba.c b/ext/dba/dba.c
index c0688714fe7c..a9114753a8a6 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 79b60c765c37..3578866b546c 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 dfcd637c8f87..59846c90a4c8 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 dd723ea40af8..50893d8458c8 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 aacc65dda5a5..d4111e8c41fc 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 16ac9be37a13..fbd5f8191b44 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 9579444454ce..73f137e9891f 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 4208277a920d..5e8bae223f9e 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 961f539a451f..64877eb289c4 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 1539bb0496dd..bf5ef322759d 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 57e74f320239..6e6a78ad5e24 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 2b4002591e91..c60ab7e5f428 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 8e692b7e55bc..cc97cd9757f4 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 0539a7036602..5f4ed5eeabdc 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 86c8a4f0ed65..38ad3ea2820b 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); \
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.