Commit 71c54b8c authored by unknown's avatar unknown

This is a patch for Bug#48500

5.0 buffer overflow for ER_UPDATE_INFO, or truncated info message in 5.1
      
5.0.86 has a buffer overflow/crash, and 5.1.40 has a truncated message.
      
errmsg.txt contains this:
      
ER_UPDATE_INFO
rum "Linii identificate (matched): %ld  Schimbate: %ld  Atentionari 
(warnings): %ld"
When that is sprintf'd into a buffer of STRING_BUFFER_USUAL_SIZE size,
a buffer overflow can happen.
      
The solution to this is to use MYSQL_ERRMSG_SIZE for the buffer size, 
instead of STRING_BUFFER_USUAL_SIZE. This will allow longer strings. 
To avoid potential crashes, we will also use my_snprintf instead of
sprintf.

sql/sql_update.cc:
  sing MYSQL_ERRMSG_SIZE instead of STRING_BUFFER_USUAL_SIZE.
  Using my_snprintf instead of sprintf.
parent 794e2063
...@@ -600,8 +600,8 @@ int mysql_update(THD *thd, ...@@ -600,8 +600,8 @@ int mysql_update(THD *thd,
if (error < 0) if (error < 0)
{ {
char buff[STRING_BUFFER_USUAL_SIZE]; char buff[MYSQL_ERRMSG_SIZE];
sprintf(buff, ER(ER_UPDATE_INFO), (ulong) found, (ulong) updated, my_snprintf(buff, sizeof(buff), ER(ER_UPDATE_INFO), (ulong) found, (ulong) updated,
(ulong) thd->cuted_fields); (ulong) thd->cuted_fields);
thd->row_count_func= thd->row_count_func=
(thd->client_capabilities & CLIENT_FOUND_ROWS) ? found : updated; (thd->client_capabilities & CLIENT_FOUND_ROWS) ? found : updated;
......
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