Bug#37995 Error message truncation in test "innodb" in embedded mode.
code backported from 6.0 per-file messages: include/my_global.h Remove SC_MAXWIDTH. This is unused and irrelevant nowadays. include/my_sys.h Remove errbuf declaration and unused definitions. mysys/my_error.c Remove errbuf definition and move and adjust ERRMSGSIZE. mysys/my_init.c Declare buffer on the stack and use my_snprintf. mysys/safemalloc.c Use size explicitly. It's more than enough for the message at hand. sql/sql_error.cc Use size explicitly. It's more than enough for the message at hand. sql/sql_parse.cc Declare buffer on the stack. Use my_snprintf as it will result in less stack space being used than by a system provided sprintf -- this allows us to put the buffer on the stack without causing much trouble. Also, the use of errbuff here was not thread-safe as the function can be entered concurrently from multiple threads. sql/sql_table.cc Use MYSQL_ERRMSG_SIZE. Extra space is not needed as my_snprintf will nul terminate strings. storage/myisam/ha_myisam.cc Use MYSQL_ERRMSG_SIZE. sql/share/errmsg.txt Error message truncation in test "innodb" in embedded mode filename in the error message can safely take up to 210 symbols.
This commit is contained in:
parent
b6542a374b
commit
cf0d0a5e96
@ -724,7 +724,6 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
||||
#define UNSINT32 /* unsigned int32 */
|
||||
|
||||
/* General constants */
|
||||
#define SC_MAXWIDTH 256 /* Max width of screen (for error messages) */
|
||||
#define FN_LEN 256 /* Max file name len */
|
||||
#define FN_HEADLEN 253 /* Max length of filepart of file name */
|
||||
#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */
|
||||
|
@ -39,8 +39,6 @@ extern int NEAR my_errno; /* Last error in mysys */
|
||||
#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;}
|
||||
#define MY_INIT(name); { my_progname= name; my_init(); }
|
||||
|
||||
#define ERRMSGSIZE (SC_MAXWIDTH) /* Max length of a error message */
|
||||
#define NRERRBUFFS (2) /* Buffers for parameters */
|
||||
#define MY_FILE_ERROR ((size_t) -1)
|
||||
|
||||
/* General bitmaps for my_func's */
|
||||
@ -208,7 +206,6 @@ extern void my_large_free(uchar * ptr, myf my_flags);
|
||||
extern int errno; /* declare errno */
|
||||
#endif
|
||||
#endif /* #ifndef errno */
|
||||
extern char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
extern char *home_dir; /* Home directory for user */
|
||||
extern const char *my_progname; /* program-name (printed in errors) */
|
||||
extern char NEAR curr_dir[]; /* Current directory for user */
|
||||
|
@ -19,6 +19,10 @@
|
||||
#include <stdarg.h>
|
||||
#include <m_ctype.h>
|
||||
|
||||
/* Max length of a error message. Should be kept in sync with MYSQL_ERRMSG_SIZE. */
|
||||
#define ERRMSGSIZE (512)
|
||||
|
||||
|
||||
/* Define some external variables for error handling */
|
||||
|
||||
/*
|
||||
@ -30,8 +34,6 @@
|
||||
my_printf_error(ER_CODE, format, MYF(N), ...)
|
||||
*/
|
||||
|
||||
char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
|
||||
/*
|
||||
Message texts are registered into a linked list of 'my_err_head' structs.
|
||||
Each struct contains (1.) an array of pointers to C character strings with
|
||||
@ -75,7 +77,7 @@ int my_error(int nr, myf MyFlags, ...)
|
||||
const char *format;
|
||||
struct my_err_head *meh_p;
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE + 20];
|
||||
char ebuff[ERRMSGSIZE];
|
||||
DBUG_ENTER("my_error");
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno));
|
||||
|
||||
@ -112,7 +114,7 @@ int my_error(int nr, myf MyFlags, ...)
|
||||
int my_printf_error(uint error, const char *format, myf MyFlags, ...)
|
||||
{
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE+20];
|
||||
char ebuff[ERRMSGSIZE];
|
||||
DBUG_ENTER("my_printf_error");
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d Format: %s",
|
||||
error, MyFlags, errno, format));
|
||||
|
@ -153,9 +153,11 @@ void my_end(int infoflag)
|
||||
{ /* Test if some file is left open */
|
||||
if (my_file_opened | my_stream_opened)
|
||||
{
|
||||
sprintf(errbuff[0],EE(EE_OPEN_WARNING),my_file_opened,my_stream_opened);
|
||||
(void) my_message_no_curses(EE_OPEN_WARNING,errbuff[0],ME_BELL);
|
||||
DBUG_PRINT("error",("%s",errbuff[0]));
|
||||
char ebuff[512];
|
||||
my_snprintf(ebuff, sizeof(ebuff), EE(EE_OPEN_WARNING),
|
||||
my_file_opened, my_stream_opened);
|
||||
my_message_no_curses(EE_OPEN_WARNING, ebuff, ME_BELL);
|
||||
DBUG_PRINT("error", ("%s", ebuff));
|
||||
my_print_open_files();
|
||||
}
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ void *_mymalloc(size_t size, const char *filename, uint lineno, myf MyFlags)
|
||||
error_handler_hook=fatal_error_handler_hook;
|
||||
if (MyFlags & (MY_FAE+MY_WME))
|
||||
{
|
||||
char buff[SC_MAXWIDTH];
|
||||
char buff[256];
|
||||
my_errno=errno;
|
||||
sprintf(buff,"Out of memory at line %d, '%s'", lineno, filename);
|
||||
my_message(EE_OUTOFMEMORY, buff, MYF(ME_BELL+ME_WAITTANG+ME_NOREFRESH));
|
||||
|
@ -571,30 +571,30 @@ ER_ERROR_ON_READ
|
||||
swe "Fick fel vid läsning av '%-.200s' (Felkod %d)"
|
||||
ukr "îÅ ÍÏÖÕ ÐÒÏÞÉÔÁÔÉ ÆÁÊÌ '%-.200s' (ÐÏÍÉÌËÁ: %d)"
|
||||
ER_ERROR_ON_RENAME
|
||||
cze "Chyba p-Bøi pøejmenování '%-.150s' na '%-.150s' (chybový kód: %d)"
|
||||
dan "Fejl ved omdøbning af '%-.150s' til '%-.150s' (Fejlkode: %d)"
|
||||
nla "Fout bij het hernoemen van '%-.150s' naar '%-.150s' (Errcode: %d)"
|
||||
eng "Error on rename of '%-.150s' to '%-.150s' (errno: %d)"
|
||||
jps "'%-.150s' ‚ð '%-.150s' ‚É rename ‚Å‚«‚Ü‚¹‚ñ (errno: %d)",
|
||||
est "Viga faili '%-.150s' ümbernimetamisel '%-.150s'-ks (veakood: %d)"
|
||||
fre "Erreur en renommant '%-.150s' en '%-.150s' (Errcode: %d)"
|
||||
ger "Fehler beim Umbenennen von '%-.150s' in '%-.150s' (Fehler: %d)"
|
||||
greek "Ðñüâëçìá êáôÜ ôçí ìåôïíïìáóßá ôïõ áñ÷åßïõ '%-.150s' to '%-.150s' (êùäéêüò ëÜèïõò: %d)"
|
||||
hun "Hiba a '%-.150s' file atnevezesekor '%-.150s'. (hibakod: %d)"
|
||||
ita "Errore durante la rinominazione da '%-.150s' a '%-.150s' (errno: %d)"
|
||||
jpn "'%-.150s' ¤ò '%-.150s' ¤Ë rename ¤Ç¤¤Þ¤»¤ó (errno: %d)"
|
||||
kor "'%-.150s'¸¦ '%-.150s'·Î À̸§ º¯°æÁß ¿¡·¯ (¿¡·¯¹øÈ£: %d)"
|
||||
nor "Feil ved omdøping av '%-.150s' til '%-.150s' (Feilkode: %d)"
|
||||
norwegian-ny "Feil ved omdøyping av '%-.150s' til '%-.150s' (Feilkode: %d)"
|
||||
pol "B³?d podczas zmieniania nazwy '%-.150s' na '%-.150s' (Kod b³êdu: %d)"
|
||||
por "Erro ao renomear '%-.150s' para '%-.150s' (erro no. %d)"
|
||||
rum "Eroare incercind sa renumesc '%-.150s' in '%-.150s' (errno: %d)"
|
||||
rus "ïÛÉÂËÁ ÐÒÉ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÉ '%-.150s' × '%-.150s' (ÏÛÉÂËÁ: %d)"
|
||||
serbian "Greška pri promeni imena '%-.150s' na '%-.150s' (errno: %d)"
|
||||
slo "Chyba pri premenovávaní '%-.150s' na '%-.150s' (chybový kód: %d)"
|
||||
spa "Error en el renombrado de '%-.150s' a '%-.150s' (Error: %d)"
|
||||
swe "Kan inte byta namn från '%-.150s' till '%-.150s' (Felkod: %d)"
|
||||
ukr "îÅ ÍÏÖÕ ÐÅÒÅÊÍÅÎÕ×ÁÔÉ '%-.150s' Õ '%-.150s' (ÐÏÍÉÌËÁ: %d)"
|
||||
cze "Chyba p-Bøi pøejmenování '%-.210s' na '%-.210s' (chybový kód: %d)"
|
||||
dan "Fejl ved omdøbning af '%-.210s' til '%-.210s' (Fejlkode: %d)"
|
||||
nla "Fout bij het hernoemen van '%-.210s' naar '%-.210s' (Errcode: %d)"
|
||||
eng "Error on rename of '%-.210s' to '%-.210s' (errno: %d)"
|
||||
jps "'%-.210s' ‚ð '%-.210s' ‚É rename ‚Å‚«‚Ü‚¹‚ñ (errno: %d)",
|
||||
est "Viga faili '%-.210s' ümbernimetamisel '%-.210s'-ks (veakood: %d)"
|
||||
fre "Erreur en renommant '%-.210s' en '%-.210s' (Errcode: %d)"
|
||||
ger "Fehler beim Umbenennen von '%-.210s' in '%-.210s' (Fehler: %d)"
|
||||
greek "Ðñüâëçìá êáôÜ ôçí ìåôïíïìáóßá ôïõ áñ÷åßïõ '%-.210s' to '%-.210s' (êùäéêüò ëÜèïõò: %d)"
|
||||
hun "Hiba a '%-.210s' file atnevezesekor '%-.210s'. (hibakod: %d)"
|
||||
ita "Errore durante la rinominazione da '%-.210s' a '%-.210s' (errno: %d)"
|
||||
jpn "'%-.210s' ¤ò '%-.210s' ¤Ë rename ¤Ç¤¤Þ¤»¤ó (errno: %d)"
|
||||
kor "'%-.210s'¸¦ '%-.210s'·Î À̸§ º¯°æÁß ¿¡·¯ (¿¡·¯¹øÈ£: %d)"
|
||||
nor "Feil ved omdøping av '%-.210s' til '%-.210s' (Feilkode: %d)"
|
||||
norwegian-ny "Feil ved omdøyping av '%-.210s' til '%-.210s' (Feilkode: %d)"
|
||||
pol "B³?d podczas zmieniania nazwy '%-.210s' na '%-.210s' (Kod b³êdu: %d)"
|
||||
por "Erro ao renomear '%-.210s' para '%-.210s' (erro no. %d)"
|
||||
rum "Eroare incercind sa renumesc '%-.210s' in '%-.210s' (errno: %d)"
|
||||
rus "ïÛÉÂËÁ ÐÒÉ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÉ '%-.210s' × '%-.210s' (ÏÛÉÂËÁ: %d)"
|
||||
serbian "Greška pri promeni imena '%-.210s' na '%-.210s' (errno: %d)"
|
||||
slo "Chyba pri premenovávaní '%-.210s' na '%-.210s' (chybový kód: %d)"
|
||||
spa "Error en el renombrado de '%-.210s' a '%-.210s' (Error: %d)"
|
||||
swe "Kan inte byta namn från '%-.210s' till '%-.210s' (Felkod: %d)"
|
||||
ukr "îÅ ÍÏÖÕ ÐÅÒÅÊÍÅÎÕ×ÁÔÉ '%-.210s' Õ '%-.210s' (ÐÏÍÉÌËÁ: %d)"
|
||||
ER_ERROR_ON_WRITE
|
||||
cze "Chyba p-Bøi zápisu do souboru '%-.200s' (chybový kód: %d)"
|
||||
dan "Fejl ved skriving av filen '%-.200s' (Fejlkode: %d)"
|
||||
|
@ -177,7 +177,7 @@ void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level,
|
||||
uint code, const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
char warning[ERRMSGSIZE+20];
|
||||
char warning[MYSQL_ERRMSG_SIZE];
|
||||
DBUG_ENTER("push_warning_printf");
|
||||
DBUG_PRINT("enter",("warning: %u", code));
|
||||
|
||||
|
@ -5454,9 +5454,10 @@ bool check_stack_overrun(THD *thd, long margin,
|
||||
if ((stack_used=used_stack(thd->thread_stack,(char*) &stack_used)) >=
|
||||
(long) (my_thread_stack_size - margin))
|
||||
{
|
||||
sprintf(errbuff[0],ER(ER_STACK_OVERRUN_NEED_MORE),
|
||||
stack_used,my_thread_stack_size,margin);
|
||||
my_message(ER_STACK_OVERRUN_NEED_MORE,errbuff[0],MYF(0));
|
||||
char ebuff[MYSQL_ERRMSG_SIZE];
|
||||
my_snprintf(ebuff, sizeof(ebuff), ER(ER_STACK_OVERRUN_NEED_MORE),
|
||||
stack_used, my_thread_stack_size, margin);
|
||||
my_message(ER_STACK_OVERRUN_NEED_MORE, ebuff, MYF(ME_FATALERROR));
|
||||
thd->fatal_error();
|
||||
return 1;
|
||||
}
|
||||
|
@ -4435,8 +4435,8 @@ send_result_message:
|
||||
switch (result_code) {
|
||||
case HA_ADMIN_NOT_IMPLEMENTED:
|
||||
{
|
||||
char buf[ERRMSGSIZE+20];
|
||||
uint length=my_snprintf(buf, ERRMSGSIZE,
|
||||
char buf[MYSQL_ERRMSG_SIZE];
|
||||
uint length=my_snprintf(buf, sizeof(buf),
|
||||
ER(ER_CHECK_NOT_IMPLEMENTED), operator_name);
|
||||
protocol->store(STRING_WITH_LEN("note"), system_charset_info);
|
||||
protocol->store(buf, length, system_charset_info);
|
||||
@ -4445,8 +4445,8 @@ send_result_message:
|
||||
|
||||
case HA_ADMIN_NOT_BASE_TABLE:
|
||||
{
|
||||
char buf[ERRMSGSIZE+20];
|
||||
uint length= my_snprintf(buf, ERRMSGSIZE,
|
||||
char buf[MYSQL_ERRMSG_SIZE];
|
||||
uint length= my_snprintf(buf, sizeof(buf),
|
||||
ER(ER_BAD_TABLE_ERROR), table_name);
|
||||
protocol->store(STRING_WITH_LEN("note"), system_charset_info);
|
||||
protocol->store(buf, length, system_charset_info);
|
||||
@ -4573,11 +4573,12 @@ send_result_message:
|
||||
case HA_ADMIN_NEEDS_UPGRADE:
|
||||
case HA_ADMIN_NEEDS_ALTER:
|
||||
{
|
||||
char buf[ERRMSGSIZE];
|
||||
char buf[MYSQL_ERRMSG_SIZE];
|
||||
uint length;
|
||||
|
||||
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||
length=my_snprintf(buf, ERRMSGSIZE, ER(ER_TABLE_NEEDS_UPGRADE), table->table_name);
|
||||
length=my_snprintf(buf, sizeof(buf), ER(ER_TABLE_NEEDS_UPGRADE),
|
||||
table->table_name);
|
||||
protocol->store(buf, length, system_charset_info);
|
||||
fatal_error=1;
|
||||
break;
|
||||
@ -4585,8 +4586,8 @@ send_result_message:
|
||||
|
||||
default: // Probably HA_ADMIN_INTERNAL_ERROR
|
||||
{
|
||||
char buf[ERRMSGSIZE+20];
|
||||
uint length=my_snprintf(buf, ERRMSGSIZE,
|
||||
char buf[MYSQL_ERRMSG_SIZE];
|
||||
uint length=my_snprintf(buf, sizeof(buf),
|
||||
"Unknown - internal error %d during operation",
|
||||
result_code);
|
||||
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||
|
@ -1257,7 +1257,7 @@ int ha_myisam::preload_keys(THD* thd, HA_CHECK_OPT *check_opt)
|
||||
ulonglong map;
|
||||
TABLE_LIST *table_list= table->pos_in_table_list;
|
||||
my_bool ignore_leaves= table_list->ignore_leaves;
|
||||
char buf[ERRMSGSIZE+20];
|
||||
char buf[MYSQL_ERRMSG_SIZE];
|
||||
|
||||
DBUG_ENTER("ha_myisam::preload_keys");
|
||||
|
||||
@ -1285,7 +1285,7 @@ int ha_myisam::preload_keys(THD* thd, HA_CHECK_OPT *check_opt)
|
||||
errmsg= "Failed to allocate buffer";
|
||||
break;
|
||||
default:
|
||||
my_snprintf(buf, ERRMSGSIZE,
|
||||
my_snprintf(buf, sizeof(buf),
|
||||
"Failed to read from index file (errno: %d)", my_errno);
|
||||
errmsg= buf;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user