- Fixed bug #45373 (php crash on query with errors in params)

This commit is contained in:
Felipe Pena 2008-10-06 14:28:29 +00:00
parent 00ac4cac45
commit 82eaeb6bfe
2 changed files with 54 additions and 6 deletions

View 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) ? */

View File

@ -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)