mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug #19216: Client crashes on long SELECT
The server sends a number of columns to the client. It uses a limited "fast" function for that instead of the general one. This fast function cannot send numbers larger than 2 bytes. This causes the client to expect smaller number of columns. The client writes outside of the allocated memory buffer as a result. Fixed the server to use the general function to send column count. Fixed the client to check the column count before writing column data. mysql-test/t/mysql_client.test: Bug #19216: Client crashes on long SELECT - test case sql/protocol.cc: Bug #19216: Client crashes on long SELECT - renamed the function for bether comprehention and made it local - used the right (non-local) function to transfer the column count in Protocol::send_fields sql/protocol.h: Bug #19216: Client crashes on long SELECT - made optimized net_store_length local sql-common/client.c: Bug #19216: Client crashes on long SELECT - fixed the client to check for older servers (without the fix).
This commit is contained in:
@ -33,3 +33,21 @@
|
||||
#
|
||||
--exec echo 'help' | $MYSQL > $MYSQLTEST_VARDIR/tmp/bug20328.tmp
|
||||
--exec echo 'help ' | $MYSQL > $MYSQLTEST_VARDIR/tmp/bug20328.tmp
|
||||
|
||||
#
|
||||
# Bug #19216: Client crashes on long SELECT
|
||||
#
|
||||
--exec echo "select" > $MYSQLTEST_VARDIR/tmp/b19216.tmp
|
||||
# 3400 * 20 makes 68000 columns that is more than the max number that can fit
|
||||
# in a 16 bit number.
|
||||
let $i= 3400;
|
||||
while ($i)
|
||||
{
|
||||
--exec echo "'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'," >> $MYSQLTEST_VARDIR/tmp/b19216.tmp
|
||||
dec $i;
|
||||
}
|
||||
|
||||
--exec echo "'b';" >> $MYSQLTEST_VARDIR/tmp/b19216.tmp
|
||||
--disable_query_log
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/b19216.tmp >/dev/null
|
||||
--enable_query_log
|
||||
|
Reference in New Issue
Block a user