uw Thu, 24 Mar 2011 13:40:06 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=309648
Log: Limit test with 65k params, should crash mysqlnd Changed paths: A php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt A php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt Added: php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt 2011-03-24 13:40:06 UTC (rev 309648) @@ -0,0 +1,122 @@ +--TEST-- +Bind limits +--SKIPIF-- +<?php +require_once('skipif.inc'); +require_once('skipifemb.inc'); +require_once('skipifconnectfailure.inc'); +?> +--FILE-- +<?php + require_once("connect.inc"); + + function bind_many($offset, $link, $num_params, $rows, $eval = true) { + + $drop = "DROP TABLE IF EXISTS test"; + $create = "CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, "; + $insert = "INSERT INTO test"; + $columns = ""; + $values = ""; + $stmt_params = ""; + $params = array(); + for ($i = 0; $i < $num_params; $i++) { + $create .= "col" . $i . " INT, "; + $columns .= "col" . $i . ", "; + $values .= "?, "; + $stmt_params .= '$params[' . $i . '], '; + for ($j = 0; $j < $rows; $j++) + $params[($j * $rows) + $i] = $i; + } + $create = substr($create, 0, -2) . ")"; + + $stmt_types = str_repeat("i", $num_params * $rows); + $stmt_params = substr(str_repeat($stmt_params, $rows), 0, -2); + $values = substr($values, 0, -2); + $insert .= "(" . substr($columns, 0, -2) . ") VALUES "; + $insert .= substr(str_repeat("(" . $values . "), ", $rows), 0, -2); + + $stmt_bind_param = 'return mysqli_stmt_bind_param($stmt, "' . $stmt_types . '", ' . $stmt_params . ');'; + + printf("Testing %d columns with %d rows...\n", $num_params, $rows); + + if (!$link->query($drop) || !$link->query($create)) { + printf("[%03d + 01] [%d] %s\n", $offset, $link->errno, $link->error); + return false; + } + printf("... table created\n"); + + if (!$stmt = $link->prepare($insert)) { + printf("[%03d + 02] [%d] %s\n", $offset, $link->errno, $link->error); + return false; + } + if ($stmt->param_count != $num_params * $rows) { + printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count); + return false; + } + printf("... statement with %d parameters prepared\n", $stmt->param_count); + + if ($eval) { + if (!eval($stmt_bind_param)) { + printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error); + return false; + } + } else { + $param_ref = array($stmt_types); + for ($i = 0; $i < $rows; $i++) + for ($j = 0; $j < $num_params; $j++) + $param_ref[] = &$params[($i * $rows) + $j]; + + if (!call_user_func_array(array($stmt, 'bind_param'), $param_ref)) { + printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error); + return false; + } + } + if ($stmt->param_count != $num_params * $rows) { + printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count); + return false; + } + + if (!$stmt->execute()) { + printf("[%03d + 04] [%d] %s\n", $offset, $stmt->errno, $stmt->error); + return false; + } + printf("Statement done\n"); + + $stmt->close(); + + if (!($res = $link->query("SELECT * FROM test"))) { + printf("[%03d + 05] [%d] %s\n", $offset, $link->errno, $link->error); + return false; + } + + $row = $res->fetch_row(); + $res->close(); + + for ($i = 0; $i < $num_params; $i++) { + if ($row[$i + 1] != $i) { + printf("[%03d + 06] [%d] %s\n", $offset, $link->errno, $link->error); + } + } + + return true; + } + + if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { + printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket); + } + + var_dump(bind_many(10, $link, 273, 240, true)); + var_dump(bind_many(20, $link, 273, 240, false)); + mysqli_close($link); + print "done!"; +?> +--CLEAN-- +<?php +require_once("clean_table.inc"); +?> +--XFAIL-- +Statement limits hit, should crash +--EXPECTF-- +TODO +done! \ No newline at end of file Added: php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt =================================================================== --- php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt (rev 0) +++ php/php-src/trunk/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt 2011-03-24 13:40:06 UTC (rev 309648) @@ -0,0 +1,122 @@ +--TEST-- +Bind limits +--SKIPIF-- +<?php +require_once('skipif.inc'); +require_once('skipifemb.inc'); +require_once('skipifconnectfailure.inc'); +?> +--FILE-- +<?php + require_once("connect.inc"); + + function bind_many($offset, $link, $num_params, $rows, $eval = true) { + + $drop = "DROP TABLE IF EXISTS test"; + $create = "CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, "; + $insert = "INSERT INTO test"; + $columns = ""; + $values = ""; + $stmt_params = ""; + $params = array(); + for ($i = 0; $i < $num_params; $i++) { + $create .= "col" . $i . " INT, "; + $columns .= "col" . $i . ", "; + $values .= "?, "; + $stmt_params .= '$params[' . $i . '], '; + for ($j = 0; $j < $rows; $j++) + $params[($j * $rows) + $i] = $i; + } + $create = substr($create, 0, -2) . ")"; + + $stmt_types = str_repeat("i", $num_params * $rows); + $stmt_params = substr(str_repeat($stmt_params, $rows), 0, -2); + $values = substr($values, 0, -2); + $insert .= "(" . substr($columns, 0, -2) . ") VALUES "; + $insert .= substr(str_repeat("(" . $values . "), ", $rows), 0, -2); + + $stmt_bind_param = 'return mysqli_stmt_bind_param($stmt, "' . $stmt_types . '", ' . $stmt_params . ');'; + + printf("Testing %d columns with %d rows...\n", $num_params, $rows); + + if (!$link->query($drop) || !$link->query($create)) { + printf("[%03d + 01] [%d] %s\n", $offset, $link->errno, $link->error); + return false; + } + printf("... table created\n"); + + if (!$stmt = $link->prepare($insert)) { + printf("[%03d + 02] [%d] %s\n", $offset, $link->errno, $link->error); + return false; + } + if ($stmt->param_count != $num_params * $rows) { + printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count); + return false; + } + printf("... statement with %d parameters prepared\n", $stmt->param_count); + + if ($eval) { + if (!eval($stmt_bind_param)) { + printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error); + return false; + } + } else { + $param_ref = array($stmt_types); + for ($i = 0; $i < $rows; $i++) + for ($j = 0; $j < $num_params; $j++) + $param_ref[] = &$params[($i * $rows) + $j]; + + if (!call_user_func_array(array($stmt, 'bind_param'), $param_ref)) { + printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error); + return false; + } + } + if ($stmt->param_count != $num_params * $rows) { + printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count); + return false; + } + + if (!$stmt->execute()) { + printf("[%03d + 04] [%d] %s\n", $offset, $stmt->errno, $stmt->error); + return false; + } + printf("Statement done\n"); + + $stmt->close(); + + if (!($res = $link->query("SELECT * FROM test"))) { + printf("[%03d + 05] [%d] %s\n", $offset, $link->errno, $link->error); + return false; + } + + $row = $res->fetch_row(); + $res->close(); + + for ($i = 0; $i < $num_params; $i++) { + if ($row[$i + 1] != $i) { + printf("[%03d + 06] [%d] %s\n", $offset, $link->errno, $link->error); + } + } + + return true; + } + + if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { + printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $user, $db, $port, $socket); + } + + var_dump(bind_many(10, $link, 273, 240, true)); + var_dump(bind_many(20, $link, 273, 240, false)); + mysqli_close($link); + print "done!"; +?> +--CLEAN-- +<?php +require_once("clean_table.inc"); +?> +--XFAIL-- +Statement limits hit, should crash +--EXPECTF-- +TODO +done! \ No newline at end of file
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php