From: Daniela Mariaschi Date: Thu, 4 Apr 2002 02:15:47 +0000 (+0000) Subject: Fixed sigfault in ibase_close(). Bug #15419 #15992 X-Git-Tag: php-4.3.0dev-ZendEngine2-Preview1~894 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c02a5dcc1d33735c9d676b3cc057b9383bdd6168;p=php Fixed sigfault in ibase_close(). Bug #15419 #15992 @- Fixed sigfault in ibase_close() if user doesn't free resultset @ (Bug #15419, #15992) (daniela) --- diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c index aed0db0837..a5daf4e037 100644 --- a/ext/interbase/interbase.c +++ b/ext/interbase/interbase.c @@ -383,12 +383,17 @@ static void _php_ibase_close_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ _php_ibase_free_result() */ static void _php_ibase_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC) { + char tr_items[] = {isc_info_tra_id }; + char tmp[32]; /* should be enough as on the Api doc */ + ibase_result *ib_result = (ibase_result *)rsrc->ptr; IBDEBUG("Freeing result..."); if (ib_result){ _php_ibase_free_xsqlda(ib_result->out_sqlda); - if (ib_result->drop_stmt && ib_result->stmt) { + isc_transaction_info(IB_STATUS, &ib_result->trans,sizeof(tr_items), tr_items, sizeof(tmp), tmp ); + /* we have a transaction still open and we really want to drop the statement ? */ + if ( !(IB_STATUS[0] && IB_STATUS[1]) && ib_result->drop_stmt && ib_result->stmt ) { IBDEBUG("Dropping statement handle (free_result)..."); if (isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_drop)) { _php_ibase_error(); @@ -416,6 +421,8 @@ static void _php_ibase_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ _php_ibase_free_query() */ static void _php_ibase_free_query(ibase_query *ib_query) { + char tr_items[] = {isc_info_tra_id }; + char tmp[32] ; /* ...should be enough as on the Api doc */ TSRMLS_FETCH(); IBDEBUG("Freeing query..."); @@ -426,7 +433,9 @@ static void _php_ibase_free_query(ibase_query *ib_query) if (ib_query->out_sqlda) { efree(ib_query->out_sqlda); } - if (ib_query->stmt) { + isc_transaction_info(IB_STATUS, &ib_query->trans,sizeof(tr_items), tr_items, sizeof(tmp), tmp ); + /* we have the trans still open and a statement to drop? */ + if ( !(IB_STATUS[0] && IB_STATUS[0]) && ib_query->stmt) { IBDEBUG("Dropping statement handle (free_query)..."); if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_drop)){ _php_ibase_error();