mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-20466: SHOW PROCESSLIST truncates query text on \0 bytes
Data should be sent with length.
This commit is contained in:
@ -17,3 +17,4 @@ select command, time < 5 from information_schema.processlist where id != connect
|
||||
command time < 5
|
||||
Sleep 1
|
||||
set debug_sync='reset';
|
||||
End of 5.5 tests
|
||||
|
BIN
mysql-test/r/processlist_MDEV-20466.result
Normal file
BIN
mysql-test/r/processlist_MDEV-20466.result
Normal file
Binary file not shown.
@ -50,3 +50,5 @@ select command, time < 5 from information_schema.processlist where id != connect
|
||||
|
||||
disconnect con1;
|
||||
set debug_sync='reset';
|
||||
|
||||
--echo End of 5.5 tests
|
||||
|
35
mysql-test/t/processlist_MDEV-20466.test
Normal file
35
mysql-test/t/processlist_MDEV-20466.test
Normal file
@ -0,0 +1,35 @@
|
||||
--echo # This test has a result that includes \0 byte.
|
||||
--echo # Such a byte makes diff to treat the whole file as binary,
|
||||
--echo # and to refuse to diff it.
|
||||
--echo # That's why this test is put in a separate file,
|
||||
--echo # so that diff would still work on results of other tests.
|
||||
|
||||
source include/have_debug.inc;
|
||||
source include/have_debug_sync.inc;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-20466: SHOW PROCESSLIST truncates query text on \0 bytes
|
||||
--echo #
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
|
||||
#select * from information_schema.processlist;
|
||||
connection con1;
|
||||
|
||||
let $q= `select CONCAT("SELECT user FROM mysql.user WHERE user ='some", CHAR(0), "' or sleep (3)")`;
|
||||
|
||||
SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync';
|
||||
--send_eval $q;
|
||||
|
||||
connection default;
|
||||
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
||||
|
||||
--replace_column 1 ID 3 HOST_NAME 6 TIME 9 TIME_MS
|
||||
SHOW PROCESSLIST;
|
||||
|
||||
disconnect con1;
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
--echo End of 5.5 tests
|
@ -2278,8 +2278,12 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
||||
else
|
||||
protocol->store_null();
|
||||
protocol->store(thd_info->state_info, system_charset_info);
|
||||
if (thd_info->query_string.length())
|
||||
protocol->store(thd_info->query_string.str(),
|
||||
thd_info->query_string.length(),
|
||||
thd_info->query_string.charset());
|
||||
else
|
||||
protocol->store_null();
|
||||
if (!thd->variables.old_mode &&
|
||||
!(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO))
|
||||
protocol->store(thd_info->progress, 3, &store_buffer);
|
||||
|
Reference in New Issue
Block a user