]> granicus.if.org Git - php/commitdiff
- Fixed bug #45373 (php crash on query with errors in params)
authorFelipe Pena <felipe@php.net>
Mon, 6 Oct 2008 14:28:29 +0000 (14:28 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 6 Oct 2008 14:28:29 +0000 (14:28 +0000)
ext/interbase/ibase_query.c
ext/interbase/tests/bug45373.phpt [new file with mode: 0644]

index e3c0a51740aaa4c50506959d826a1a0a08d4f40f..000fcdecd43868a28ee6741c6736fd26b1544660 100644 (file)
@@ -1855,16 +1855,17 @@ PHP_FUNCTION(ibase_execute)
                if (bind_n != expected_n) {
                        php_error_docref(NULL TSRMLS_CC, (bind_n < expected_n) ? E_WARNING : E_NOTICE,
                                "Statement expects %d arguments, %d given", expected_n, bind_n);
+
                        if (bind_n < expected_n) {
                                break;
                        }
-
-               } else if (bind_n > 0) { /* have variables to bind */
-                       args = (zval ***) do_alloca(ZEND_NUM_ARGS() * sizeof(zval **), use_heap);
+               }
+               
+               /* have variables to bind */
+               args = (zval ***) do_alloca(ZEND_NUM_ARGS() * sizeof(zval **), use_heap);
        
-                       if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)) {
-                               break;
-                       }
+               if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)) {
+                       break;
                }
 
                /* Have we used this cursor before and it's still open (exec proc has no cursor) ? */
diff --git a/ext/interbase/tests/bug45373.phpt b/ext/interbase/tests/bug45373.phpt
new file mode 100644 (file)
index 0000000..bbaccd1
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+Bug #45373 (php crash on query with errors in params)
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+       require("interbase.inc");
+    
+       $db = ibase_connect($test_base);
+
+
+       $sql = "select * from test1 where i = ? and c = ?";
+
+       $q = ibase_prepare($db, $sql);
+       $r = ibase_execute($q, 1, 'test table not created with isql');
+       var_dump(ibase_fetch_assoc($r));
+       ibase_free_result($r);
+       
+       $r = ibase_execute($q, 1, 'test table not created with isql', 1);
+       var_dump(ibase_fetch_assoc($r));
+       ibase_free_result($r);
+       
+       $r = ibase_execute($q, 1);
+       var_dump(ibase_fetch_assoc($r));
+
+?>
+--EXPECTF--
+array(2) {
+  ["I"]=>
+  int(1)
+  ["C"]=>
+  string(32) "test table not created with isql"
+}
+
+Notice: ibase_execute(): Statement expects 2 arguments, 3 given in %sbug45373.php on line %d
+array(2) {
+  ["I"]=>
+  int(1)
+  ["C"]=>
+  string(32) "test table not created with isql"
+}
+
+Warning: ibase_execute(): Statement expects 2 arguments, 1 given in %sbug45373.php on line %d
+
+Warning: ibase_fetch_assoc(): supplied argument is not a valid Firebird/InterBase result resource in %sbug45373.php on line %d
+bool(false)