@@ -2058,6 +2058,7 @@ PHP_FUNCTION(odbc_fetch_row)
2058
2058
PHP_FUNCTION (odbc_result )
2059
2059
{
2060
2060
char * field ;
2061
+ zend_string * field_str ;
2061
2062
int field_ind ;
2062
2063
SQLSMALLINT sql_c_type = SQL_C_CHAR ;
2063
2064
odbc_result * result ;
@@ -2163,25 +2164,25 @@ PHP_FUNCTION(odbc_result)
2163
2164
}
2164
2165
/* For char data, the length of the returned string will be longreadlen - 1 */
2165
2166
fieldsize = (result -> longreadlen <= 0 ) ? 4096 : result -> longreadlen ;
2166
- field = emalloc (fieldsize );
2167
+ field_str = zend_string_alloc (fieldsize , 0 );
2167
2168
2168
2169
/* SQLGetData will truncate CHAR data to fieldsize - 1 bytes and append \0.
2169
2170
* For binary data it is truncated to fieldsize bytes.
2170
2171
*/
2171
2172
rc = SQLGetData (result -> stmt , (SQLUSMALLINT )(field_ind + 1 ), sql_c_type ,
2172
- field , fieldsize , & result -> values [field_ind ].vallen );
2173
+ ZSTR_VAL ( field_str ) , fieldsize , & result -> values [field_ind ].vallen );
2173
2174
2174
2175
if (rc == SQL_ERROR ) {
2175
2176
odbc_sql_error (result -> conn_ptr , result -> stmt , "SQLGetData" );
2176
- efree ( field );
2177
+ zend_string_free ( field_str );
2177
2178
RETURN_FALSE ;
2178
2179
}
2179
2180
2180
2181
if (result -> values [field_ind ].vallen == SQL_NULL_DATA ) {
2181
- efree ( field );
2182
+ zend_string_free ( field_str );
2182
2183
RETURN_NULL ();
2183
2184
} else if (rc == SQL_NO_DATA_FOUND ) {
2184
- efree ( field );
2185
+ zend_string_free ( field_str );
2185
2186
RETURN_FALSE ;
2186
2187
}
2187
2188
/* Reduce fieldlen by 1 if we have char data. One day we might
@@ -2196,10 +2197,10 @@ PHP_FUNCTION(odbc_result)
2196
2197
/* Don't duplicate result, saves one emalloc.
2197
2198
For SQL_SUCCESS, the length is in vallen.
2198
2199
*/
2199
- RETVAL_STRINGL ( field , (rc == SQL_SUCCESS_WITH_INFO ) ? fieldsize : result -> values [ field_ind ]. vallen );
2200
- // TODO: avoid dpouble reallocation ???
2201
- efree ( field );
2202
- return ;
2200
+ if (rc != SQL_SUCCESS_WITH_INFO ) {
2201
+ field_str = zend_string_truncate ( field_str , result -> values [ field_ind ]. vallen , 0 );
2202
+ }
2203
+ RETURN_NEW_STR ( field_str ) ;
2203
2204
break ;
2204
2205
2205
2206
default :
0 commit comments