summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2003-04-30 10:45:45 +0000
committerWez Furlong <wez@php.net>2003-04-30 10:45:45 +0000
commit6fc4f3a2ef9bcf9539541368e34607ce1826a727 (patch)
tree5c596ea0302b3a1431bf6299b2ee0a932336443a
parentf41d09f7b5de80e8051b1c11edce10310608b55d (diff)
downloadphp-git-6fc4f3a2ef9bcf9539541368e34607ce1826a727.tar.gz
Fix memory leak in odbc_fetch_(array|object).
Enable those functions for IBM DB2.
-rw-r--r--ext/odbc/php_odbc.c11
-rw-r--r--ext/odbc/php_odbc.h6
2 files changed, 10 insertions, 7 deletions
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
index a1eeeb27cb..bd08a13daa 100644
--- a/ext/odbc/php_odbc.c
+++ b/ext/odbc/php_odbc.c
@@ -84,7 +84,7 @@ function_entry odbc_functions[] = {
PHP_FE(odbc_error, NULL)
PHP_FE(odbc_errormsg, NULL)
PHP_FE(odbc_exec, NULL)
-#if defined(HAVE_DBMAKER) || defined(PHP_WIN32)
+#ifdef PHP_ODBC_HAVE_FETCH_HASH
PHP_FE(odbc_fetch_array, NULL)
PHP_FE(odbc_fetch_object, NULL)
#endif
@@ -1328,7 +1328,7 @@ PHP_FUNCTION(odbc_exec)
}
/* }}} */
-#if defined(HAVE_DBMAKER) || defined(PHP_WIN32)
+#ifdef PHP_ODBC_HAVE_FETCH_HASH
#define ODBC_NUM 1
#define ODBC_OBJECT 2
@@ -1378,8 +1378,6 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
RETURN_FALSE;
}
- array_init(return_value);
-
#ifdef HAVE_SQL_EXTENDED_FETCH
if (result->fetch_abs) {
if (rownum > 0)
@@ -1394,6 +1392,8 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
RETURN_FALSE;
}
+ array_init(return_value);
+
#ifdef HAVE_SQL_EXTENDED_FETCH
if (rownum > 0 && result->fetch_abs)
result->fetched = rownum;
@@ -1402,8 +1402,7 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
result->fetched++;
for(i = 0; i < result->numcols; i++) {
- ALLOC_ZVAL(tmp);
- tmp->refcount = 1;
+ ALLOC_INIT_ZVAL(tmp);
Z_TYPE_P(tmp) = IS_STRING;
Z_STRLEN_P(tmp) = 0;
sql_c_type = SQL_C_CHAR;
diff --git a/ext/odbc/php_odbc.h b/ext/odbc/php_odbc.h
index 6b5140295e..b03654374a 100644
--- a/ext/odbc/php_odbc.h
+++ b/ext/odbc/php_odbc.h
@@ -33,6 +33,10 @@
extern zend_module_entry odbc_module_entry;
#define odbc_module_ptr &odbc_module_entry
+#if defined(HAVE_DBMAKER) || defined(PHP_WIN32) || defined(HAVE_IBMDB2)
+# define PHP_ODBC_HAVE_FETCH_HASH 1
+#endif
+
/* user functions */
PHP_MINIT_FUNCTION(odbc);
PHP_MSHUTDOWN_FUNCTION(odbc);
@@ -54,7 +58,7 @@ PHP_FUNCTION(odbc_data_source);
PHP_FUNCTION(odbc_do);
PHP_FUNCTION(odbc_exec);
PHP_FUNCTION(odbc_execute);
-#if defined(HAVE_DBMAKER) || defined(PHP_WIN32)
+#ifdef PHP_ODBC_HAVE_FETCH_HASH
PHP_FUNCTION(odbc_fetch_array);
PHP_FUNCTION(odbc_fetch_object);
#endif