cvs: php4 /ext/db db.c
| From: | Marcus B�rger | Date: | Tue, 27 Aug 2002 00:20:38 +0000 |
| Subject: | cvs: php4 /ext/db db.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-13689@lists.php.net to get a copy of this message | ||
helly Mon Aug 26 20:20:38 2002 EDT
Modified files:
/php4/ext/db db.c
Log:
-fix memory leak on failure
-only use one function for nearly identical things
-fix stripslashes not working on input directly
Index: php4/ext/db/db.c
diff -u php4/ext/db/db.c:1.75 php4/ext/db/db.c:1.76
--- php4/ext/db/db.c:1.75 Sun Aug 18 01:05:44 2002
+++ php4/ext/db/db.c Mon Aug 26 20:20:37 2002
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: db.c,v 1.75 2002/08/18 05:05:44 imajes Exp $ */
+/* $Id: db.c,v 1.76 2002/08/27 00:20:37 helly Exp $ */
#define IS_EXT_MODULE
#ifdef HAVE_CONFIG_H
@@ -491,46 +491,12 @@
RETURN_FALSE;
}
- ret = php_dbm_insert(info, Z_STRVAL_P(key), Z_STRVAL_P(value) TSRMLS_CC);
+ ret = php_dbm_insert_replace(info, Z_STRVAL_P(key), Z_STRVAL_P(value), 0 TSRMLS_CC);
RETURN_LONG(ret);
}
/* }}} */
-/* {{{ php_dbm_insert
- */
-int php_dbm_insert(dbm_info *info, char *key, char *value TSRMLS_DC) {
- datum key_datum, value_datum;
- int ret;
- DBM_TYPE dbf;
-
- php_stripslashes(key, NULL TSRMLS_CC);
- php_stripslashes(value, NULL TSRMLS_CC);
-
- value_datum.dptr = estrdup(value);
- value_datum.dsize = strlen(value);
-
- key_datum.dptr = estrdup(key);
- key_datum.dsize = strlen(key);
-#if GDBM_FIX
- key_datum.dsize++;
-#endif
-
- dbf = info->dbf;
- if (!dbf) {
- php_error(E_WARNING, "%s(): Unable to locate dbm file",
get_active_function_name(TSRMLS_C));
- return 1;
- }
-
- ret = DBM_STORE(dbf, key_datum, value_datum, DBM_INSERT);
-
- /* free the memory */
- efree(key_datum.dptr); efree(value_datum.dptr);
-
- return(ret);
-}
-/* }}} */
-
/* {{{ proto int dbmreplace(int dbm_identifier, string key, string value)
Replaces the value for a key in a dbm database */
PHP_FUNCTION(dbmreplace)
@@ -551,28 +517,31 @@
RETURN_FALSE;
}
- ret = php_dbm_replace(info, Z_STRVAL_P(key), Z_STRVAL_P(value) TSRMLS_CC);
+ ret = php_dbm_insert_replace(info, Z_STRVAL_P(key), Z_STRVAL_P(value), 1 TSRMLS_CC);
RETURN_LONG(ret);
}
/* }}} */
/* {{{ php_dbm_replace
*/
-int php_dbm_replace(dbm_info *info, char *key, char *value TSRMLS_DC)
+int php_dbm_insert_replace(dbm_info *info, char *key, char *value, int replace_mode TSRMLS_DC)
{
DBM_TYPE dbf;
int ret;
datum key_datum, value_datum;
+ key = estrdup(key);
+ value = estrdup(value);
+
if (PG(magic_quotes_runtime)) {
php_stripslashes(key, NULL TSRMLS_CC);
php_stripslashes(value, NULL TSRMLS_CC);
}
- value_datum.dptr = estrdup(value);
+ value_datum.dptr = value;
value_datum.dsize = strlen(value);
- key_datum.dptr = estrdup(key);
+ key_datum.dptr = key;
key_datum.dsize = strlen(key);
#if GDBM_FIX
key_datum.dsize++;
@@ -581,10 +550,14 @@
dbf = info->dbf;
if (!dbf) {
php_error(E_WARNING, "%s(): Unable to locate dbm file",
get_active_function_name(TSRMLS_C));
- return 1;
+ ret = 1;
+ } else {
+ if (!replace_mode) {
+ ret = DBM_STORE(dbf, key_datum, value_datum, DBM_INSERT);
+ } else {
+ ret = DBM_STORE(dbf, key_datum, value_datum, DBM_REPLACE);
+ }
}
-
- ret = DBM_STORE(dbf, key_datum, value_datum, DBM_REPLACE);
/* free the memory */
efree(key_datum.dptr); efree(value_datum.dptr);