Commit 5273a6b9 authored by Ramil Kalimullin's avatar Ramil Kalimullin

Fix for bug #53237: mysql_list_fields/COM_FIELD_LIST stack smashing

Problem: "COM_FIELD_LIST is an old command of the MySQL server, before there was real move to only
SQL. Seems that the data sent to COM_FIELD_LIST( mysql_list_fields() function) is not
checked for sanity. By sending long data for the table a buffer is overflown, which can
be used deliberately to include code that harms".

Fix: check incoming data length.


sql/sql_parse.cc:
  Fix for bug #53237: mysql_list_fields/COM_FIELD_LIST stack smashing
    - check incoming mysql_list_fields() table name arg length.
parent e961768d
......@@ -2025,8 +2025,16 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if (thd->copy_db_to(&table_list.db, &table_list.db_length))
break;
pend= strend(packet);
uint arg_length= pend - packet;
/* Check given table name length. */
if (arg_length >= packet_length || arg_length > NAME_LEN)
{
my_message(ER_UNKNOWN_COM_ERROR, ER(ER_UNKNOWN_COM_ERROR), MYF(0));
break;
}
thd->convert_string(&conv_name, system_charset_info,
packet, (uint) (pend-packet), thd->charset());
packet, arg_length, thd->charset());
table_list.alias= table_list.table_name= conv_name.str;
packet= pend+1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment