diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index d14c24f35d7..9e8b6516f63 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -271,7 +271,7 @@ void symdirget(char *dir) SYNOPSIS unpack_dirname() - to Store result here. May be = from + to result-buffer, FN_REFLEN characters. may be == from from 'Packed' directory name (may contain ~) IMPLEMENTATION @@ -397,7 +397,7 @@ uint unpack_filename(my_string to, const char *from) /* Convert filename (unix standard) to system standard */ /* Used before system command's like open(), create() .. */ - /* Returns length of to */ + /* Returns used length of to; total length should be FN_REFLEN */ uint system_filename(my_string to, const char *from) { diff --git a/sql/log.cc b/sql/log.cc index 079384f18fe..3afc5f3a57d 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1287,7 +1287,7 @@ err: void MYSQL_LOG::make_log_name(char* buf, const char* log_ident) { uint dir_len = dirname_length(log_file_name); - if (dir_len > FN_REFLEN) + if (dir_len >= FN_REFLEN) dir_len=FN_REFLEN-1; strnmov(buf, log_file_name, dir_len); strmake(buf+dir_len, log_ident, FN_REFLEN - dir_len -1); diff --git a/sql/unireg.cc b/sql/unireg.cc index 4c980552f9e..68e8219f043 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -166,6 +166,11 @@ bool mysql_create_frm(THD *thd, my_string file_name, create_info->comment.str : "", create_info->comment.length); forminfo[46]=(uchar) create_info->comment.length; #ifdef EXTRA_DEBUG + /* + EXTRA_DEBUG causes strmake() to initialize its buffer behind the + payload with a magic value to detect wrong buffer-sizes. We + explicitly zero that segment again. + */ memset((char*) forminfo+47 + forminfo[46], 0, 61 - forminfo[46]); #endif if (my_pwrite(file,(byte*) fileinfo,64,0L,MYF_RW) ||