summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysys/mf_pack.c4
-rw-r--r--sql/log.cc2
-rw-r--r--sql/unireg.cc5
3 files changed, 8 insertions, 3 deletions
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) ||