@@ -963,6 +963,7 @@ PHP_FUNCTION(odbc_prepare)
963
963
typedef struct odbc_params_t {
964
964
SQLLEN vallen ;
965
965
int fp ;
966
+ zend_string * zstr ;
966
967
} odbc_params_t ;
967
968
968
969
static void odbc_release_params (odbc_result * result , odbc_params_t * params ) {
@@ -971,6 +972,9 @@ static void odbc_release_params(odbc_result *result, odbc_params_t *params) {
971
972
if (params [i ].fp != -1 ) {
972
973
close (params [i ].fp );
973
974
}
975
+ if (params [i ].zstr ) {
976
+ zend_string_release (params [i ].zstr );
977
+ }
974
978
}
975
979
efree (params );
976
980
}
@@ -1004,6 +1008,7 @@ PHP_FUNCTION(odbc_execute)
1004
1008
params = (odbc_params_t * )safe_emalloc (sizeof (odbc_params_t ), result -> numparams , 0 );
1005
1009
for (i = 0 ; i < result -> numparams ; i ++ ) {
1006
1010
params [i ].fp = -1 ;
1011
+ params [i ].zstr = NULL ;
1007
1012
}
1008
1013
1009
1014
i = 1 ;
@@ -1017,6 +1022,7 @@ PHP_FUNCTION(odbc_execute)
1017
1022
1018
1023
params [i - 1 ].vallen = ZSTR_LEN (tmpstr );
1019
1024
params [i - 1 ].fp = -1 ;
1025
+ params [i - 1 ].zstr = tmpstr ;
1020
1026
1021
1027
if (IS_SQL_BINARY (result -> param_info [i - 1 ].sqltype )) {
1022
1028
ctype = SQL_C_BINARY ;
@@ -1030,7 +1036,6 @@ PHP_FUNCTION(odbc_execute)
1030
1036
1031
1037
if (ZSTR_LEN (tmpstr ) != strlen (ZSTR_VAL (tmpstr ))) {
1032
1038
odbc_release_params (result , params );
1033
- zend_string_release (tmpstr );
1034
1039
RETURN_FALSE ;
1035
1040
}
1036
1041
filename = estrndup (& ZSTR_VAL (tmpstr )[1 ], ZSTR_LEN (tmpstr ) - 2 );
@@ -1040,14 +1045,12 @@ PHP_FUNCTION(odbc_execute)
1040
1045
if (php_check_open_basedir (filename )) {
1041
1046
efree (filename );
1042
1047
odbc_release_params (result , params );
1043
- zend_string_release (tmpstr );
1044
1048
RETURN_FALSE ;
1045
1049
}
1046
1050
1047
1051
if ((params [i - 1 ].fp = open (filename ,O_RDONLY )) == -1 ) {
1048
1052
php_error_docref (NULL , E_WARNING ,"Can't open file %s" , filename );
1049
1053
odbc_release_params (result , params );
1050
- zend_string_release (tmpstr );
1051
1054
efree (filename );
1052
1055
RETURN_FALSE ;
1053
1056
}
@@ -1076,10 +1079,8 @@ PHP_FUNCTION(odbc_execute)
1076
1079
if (rc == SQL_ERROR ) {
1077
1080
odbc_sql_error (result -> conn_ptr , result -> stmt , "SQLBindParameter" );
1078
1081
odbc_release_params (result , params );
1079
- zend_string_release (tmpstr );
1080
1082
RETURN_FALSE ;
1081
1083
}
1082
- zend_string_release (tmpstr );
1083
1084
if (++ i > result -> numparams ) break ;
1084
1085
} ZEND_HASH_FOREACH_END ();
1085
1086
}
0 commit comments