From 18fa78842d017fc2fa9e0dd0097f76ad3be409b5 Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Sun, 30 May 2004 17:51:19 +0000 Subject: Fix unregistered bug (segfault on uninitialised pointer) Return string("0 ") from ibase_query() if query succeeded but did not affect any rows --- ext/interbase/ibase_query.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ext/interbase/ibase_query.c b/ext/interbase/ibase_query.c index 0caf2b43a6..911417210b 100644 --- a/ext/interbase/ibase_query.c +++ b/ext/interbase/ibase_query.c @@ -307,6 +307,8 @@ static int _php_ibase_alloc_query(ibase_query *ib_query, ibase_db_link *link, /* ib_query->dialect = dialect; ib_query->query = estrdup(query); ib_query->trans_res_id = trans_res_id; + ib_query->out_sqlda = NULL; + ib_query->in_sqlda = NULL; if (isc_dsql_allocate_statement(IB_STATUS, &link->handle, &ib_query->stmt)) { _php_ibase_error(TSRMLS_C); @@ -989,10 +991,16 @@ static int _php_ibase_exec(INTERNAL_FUNCTION_PARAMETERS, ibase_result **ib_resul i += len+3; } } - if (affected_rows > 0) { - ib_query->trans->affected_rows = affected_rows; - RETVAL_LONG(affected_rows); - break; + + ib_query->trans->affected_rows = affected_rows; + + if (!ib_query->out_sqlda) { /* no result set is being returned */ + if (affected_rows) { + RETVAL_LONG(affected_rows); + } else { + /* this return value evaluates to bool(true) and to int(0) */ + RETVAL_STRINGL("0 ",2,1); + } } default: -- cgit v1.2.1