]> granicus.if.org Git - php/commitdiff
Fix unregistered bug (segfault on uninitialised pointer)
authorArd Biesheuvel <abies@php.net>
Sun, 30 May 2004 17:51:19 +0000 (17:51 +0000)
committerArd Biesheuvel <abies@php.net>
Sun, 30 May 2004 17:51:19 +0000 (17:51 +0000)
Return string("0 ") from ibase_query() if query succeeded but did not affect any rows

ext/interbase/ibase_query.c

index 0caf2b43a648285e8a4208100f15bd6516b786e7..911417210be11f13ef1e3db14f6ff48160ff2822 100644 (file)
@@ -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: