abies           Sun Aug 17 09:16:55 2003 EDT

  Modified files:              
    /php-src/ext/interbase      interbase.c 
  Log:
  Fix possible leak in _php_ibase_fetch_hash()
  
Index: php-src/ext/interbase/interbase.c
diff -u php-src/ext/interbase/interbase.c:1.149 php-src/ext/interbase/interbase.c:1.150
--- php-src/ext/interbase/interbase.c:1.149     Sun Aug 17 08:31:55 2003
+++ php-src/ext/interbase/interbase.c   Sun Aug 17 09:16:54 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: interbase.c,v 1.149 2003/08/17 12:31:55 abies Exp $ */
+/* $Id: interbase.c,v 1.150 2003/08/17 13:16:54 abies Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -699,7 +699,7 @@
 
        php_info_print_table_start();
        php_info_print_table_row(2, "Interbase Support", "enabled");
-       php_info_print_table_row(2, "Revision", "$Revision: 1.149 $");
+       php_info_print_table_row(2, "Revision", "$Revision: 1.150 $");
 #ifdef COMPILE_DL_INTERBASE
        php_info_print_table_row(2, "Dynamic Module", "Yes");
 #endif
@@ -2606,8 +2606,8 @@
        var = ib_result->out_sqlda->sqlvar;
        for (i = 0; i < ib_result->out_sqlda->sqld; i++, var++) {
                if (((var->sqltype & 1) == 0) || *var->sqlind != -1) {
-                       zval *tmp;
-                       tmp = emalloc(sizeof(zval));
+                       zval tmp;
+
                        switch (var->sqltype & ~1) {
                                case SQL_VARYING:
                                case SQL_TEXT:
@@ -2625,7 +2625,7 @@
                                case SQL_TYPE_DATE:
                                case SQL_TYPE_TIME:
 #endif
-                                       _php_ibase_var_zval(tmp, var->sqldata, 
var->sqltype, var->sqllen, var->sqlscale, flag TSRMLS_CC);
+                                       _php_ibase_var_zval(&tmp, var->sqldata, 
var->sqltype, var->sqllen, var->sqlscale, flag TSRMLS_CC);
                                        break;
                                case SQL_BLOB:
                                        if (flag & PHP_IBASE_FETCH_BLOBS) { /* fetch 
blob contents into hash */
@@ -2665,25 +2665,25 @@
                                                        RETURN_FALSE;
                                                }
                                                
-                                               if (_php_ibase_blob_get(tmp, 
&blob_handle, max_len TSRMLS_CC) != SUCCESS) {
+                                               if (_php_ibase_blob_get(&tmp, 
&blob_handle, max_len TSRMLS_CC) != SUCCESS) {
                                                        RETURN_FALSE;
                                                }
                                                
                                                if (isc_close_blob(IB_STATUS, 
&blob_handle.bl_handle)) {
+                                                       zval_dtor(&tmp);
                                                        _php_ibase_error(TSRMLS_C);
+                                                       RETURN_FALSE;
                                                }
 
                                        } else { /* blob id only */
-                                               ISC_QUAD *bl_qd = (ISC_QUAD ISC_FAR *) 
var->sqldata;
-                                               ibase_blob_handle *ib_blob_id;
-                                               
-                                               ib_blob_id = (ibase_blob_handle *) 
ecalloc(1, sizeof(ibase_blob_handle) + 1);
+
+                                               ibase_blob_handle *ib_blob_id = 
(ibase_blob_handle *) ecalloc(1, sizeof(ibase_blob_handle) + 1);
                                                
                                                ib_blob_id->link = ib_result->link;
                                                ib_blob_id->trans_handle = 
ib_result->trans;
-                                               ib_blob_id->bl_qd = *bl_qd;
+                                               ib_blob_id->bl_qd = *(ISC_QUAD ISC_FAR 
*) var->sqldata;
                                                
-                                               ZVAL_STRINGL(tmp, (char *) ib_blob_id, 
sizeof(ibase_blob_handle),0);
+                                               ZVAL_STRINGL(&tmp, (char *) 
ib_blob_id, sizeof(ibase_blob_handle),0);
                                        }
                                        break;
                                case SQL_ARRAY: {
@@ -2703,7 +2703,7 @@
                                                }
                                                
                                                tmp_ptr = ar_data; /* avoid changes in 
_arr_zval */
-                                               if (_php_ibase_arr_zval(tmp, &tmp_ptr, 
ib_array, 0, flag TSRMLS_CC) == FAILURE) {
+                                               if (_php_ibase_arr_zval(&tmp, 
&tmp_ptr, ib_array, 0, flag TSRMLS_CC) == FAILURE) {
                                                        efree(ar_data);
                                                        RETURN_FALSE;
                                                }
@@ -2719,31 +2719,30 @@
                        } /* switch */
 
                        if (fetch_type & FETCH_ROW) {
-                               switch (Z_TYPE_P(tmp)) {
+                               switch (Z_TYPE(tmp)) {
                                        case IS_STRING:
-                                               add_index_stringl(return_value, i, 
Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), 0);
+                                               add_index_stringl(return_value, i, 
Z_STRVAL(tmp), Z_STRLEN(tmp), 0);
                                                break;
                                        case IS_LONG:
-                                               add_index_long(return_value, i, 
Z_LVAL_P(tmp));
+                                               add_index_long(return_value, i, 
Z_LVAL(tmp));
                                                break;
                                        case IS_DOUBLE:
-                                               add_index_double(return_value, i, 
Z_DVAL_P(tmp));
+                                               add_index_double(return_value, i, 
Z_DVAL(tmp));
                                                break;
                                }
                        } else {
-                               switch (Z_TYPE_P(tmp)) {
+                               switch (Z_TYPE(tmp)) {
                                        case IS_STRING:
-                                               add_assoc_stringl(return_value, 
var->aliasname, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp), 0);
+                                               add_assoc_stringl(return_value, 
var->aliasname, Z_STRVAL(tmp), Z_STRLEN(tmp), 0);
                                                break;
                                        case IS_LONG:
-                                               add_assoc_long(return_value, 
var->aliasname, Z_LVAL_P(tmp));
+                                               add_assoc_long(return_value, 
var->aliasname, Z_LVAL(tmp));
                                                break;
                                        case IS_DOUBLE:
-                                               add_assoc_double(return_value, 
var->aliasname, Z_DVAL_P(tmp));
+                                               add_assoc_double(return_value, 
var->aliasname, Z_DVAL(tmp));
                                                break;
                                }
                        }
-                       efree(tmp);
                } else {
                        if (fetch_type & FETCH_ROW) {
                                add_index_null(return_value, i);



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to