|
|||||||||||
|
PHP mysqlnd svn commit: r484 - in trunk: mysqlnd php5/ext/mysqli php6/ext/mysqli tests/ext/mysqli
From: <ahristov(at)mysql.com>
Date: Mon Jun 25 2007 - 14:32:10 EDT
Modified: trunk/mysqlnd/mysqlnd.c trunk/mysqlnd/mysqlnd.h trunk/mysqlnd/mysqlnd_loaddata.c trunk/mysqlnd/mysqlnd_result.c trunk/php5/ext/mysqli/mysqli.c trunk/php6/ext/mysqli/mysqli.c trunk/tests/ext/mysqli/mysqli_set_local_infile_handler_bad_character.phptLog: Fix us not to allow server crash, when the server is debug compiled (triggering an assert). Is it still good to be able to trigger it with libmysql? Please! Don't run debug built mysqld, if you care about your data ;) Fix also usage of initialized memory in some cases. Now the test case is valgrind clean. Modified: trunk/mysqlnd/mysqlnd.c
Modified: trunk/mysqlnd/mysqlnd.h
Modified: trunk/mysqlnd/mysqlnd_loaddata.c
Modified: trunk/mysqlnd/mysqlnd_result.c
Modified: trunk/php5/ext/mysqli/mysqli.c
if (rc > 0) {
- if (rc > buf_len) {
+ if (rc > buf_len || Z_STRLEN_P(*callback_args[1]) > buf_len) {
/* check buffer overflow */
LOCAL_INFILE_ERROR_MSG(data->error_msg, "Read buffer too large");
rc = -1;
} else {
- memcpy(buf, Z_STRVAL_P(*callback_args[1]), rc);
+ memcpy(buf, Z_STRVAL_P(*callback_args[1]), MIN(rc, Z_STRLEN_P(*callback_args[1])));
}
- }
- if (rc < 0) {
+ } else if (rc < 0) {
LOCAL_INFILE_ERROR_MSG(data->error_msg, Z_STRVAL_P(*callback_args[3]));
}
} else {
Modified: trunk/php6/ext/mysqli/mysqli.c
if (rc > 0) {
- if (rc > buf_len) {
+ if (rc > buf_len || Z_STRLEN_P(*callback_args[1]) > buf_len) {
/* check buffer overflow */
LOCAL_INFILE_ERROR_MSG(data->error_msg, "Read buffer too large");
rc = -1;
} else {
- memcpy(buf, Z_STRVAL_P(*callback_args[1]), rc);
+ memcpy(buf, Z_STRVAL_P(*callback_args[1]), MIN(rc, Z_STRLEN_P(*callback_args[1])));
}
- }
- if (rc < 0) {
+ } else if (rc < 0) {
LOCAL_INFILE_ERROR_MSG(data->error_msg, Z_STRVAL_P(*callback_args[3]));
}
} else {
Modified: trunk/tests/ext/mysqli/mysqli_set_local_infile_handler_bad_character.phpt
function callback_bad_character($fp, &$buffer, $buflen, &$error) {
static $invocation = 0;
-
+ // Uncomment the following to crash the server
+// mysqli_close($GLOBALS['link']);
printf("Callback: %d\n", $invocation);
- $buffer = fread($fp, $buflen);
$buffer = '';
- for ($i = 0; $i < $buflen; $i++)
+ for ($i = 0; $i < $buflen/2; $i++)
$buffer .= chr(mt_rand(0, 255));
- die("remove this die() and you have a CPU burner that never ends");
- return $buflen;
+ return $invocation++ < 10? $buflen:0;
}
function try_handler($offset, $link, $file, $handler, $expected) {
- +/*
foreach ($expected as $k => $values) {
if (!$tmp = mysqli_fetch_assoc($res)) {
printf("[%03d/%d] [%d] %s\n", $offset + 4, $k, mysqli_errno($link), mysqli_error($link));
@@ -107,4 +106,14 @@ +Callback: 1 +Callback: 2 +Callback: 3 +Callback: 4 +Callback: 5 +Callback: 6 +Callback: 7 +Callback: 8 +Callback: 9 +Callback: 10 +done! -- MySQL Code Commits Mailing List For list archives: http://lists.mysql.com/commits To unsubscribe: http://lists.mysql.com/commits?unsub=lists@pantek.comReceived on Mon Jun 25 14:33:14 2007 This archive was generated by hypermail 2.1.8 : Mon Jun 25 2007 - 14:40:02 EDT |
||||||||||
|
|||||||||||