From 6fc4f3a2ef9bcf9539541368e34607ce1826a727 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Wed, 30 Apr 2003 10:45:45 +0000 Subject: [PATCH] Fix memory leak in odbc_fetch_(array|object). Enable those functions for IBM DB2. --- ext/odbc/php_odbc.c | 11 +++++------ ext/odbc/php_odbc.h | 6 +++++- 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 -- 2.40.0