diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/mf_loadpath.c | 11 | ||||
-rw-r--r-- | mysys/mf_pack.c | 3 | ||||
-rw-r--r-- | mysys/my_file.c | 2 | ||||
-rw-r--r-- | mysys/my_getwd.c | 11 |
4 files changed, 19 insertions, 8 deletions
diff --git a/mysys/mf_loadpath.c b/mysys/mf_loadpath.c index fbf6f7f5d57..07851ab6e92 100644 --- a/mysys/mf_loadpath.c +++ b/mysys/mf_loadpath.c @@ -34,7 +34,7 @@ char * my_load_path(char * to, const char *path, if ((path[0] == FN_HOMELIB && path[1] == FN_LIBCHAR) || test_if_hard_path(path)) - (void) strmov(buff,path); + (void) strnmov(buff, path, FN_REFLEN); else if ((is_cur=(path[0] == FN_CURLIB && path[1] == FN_LIBCHAR)) || (is_prefix(path,FN_PARENTDIR)) || ! own_path_prefix) @@ -42,13 +42,14 @@ char * my_load_path(char * to, const char *path, if (is_cur) is_cur=2; /* Remove current dir */ if (! my_getwd(buff,(uint) (FN_REFLEN-strlen(path)+is_cur),MYF(0))) - (void) strcat(buff,path+is_cur); + (void) strncat(buff, path+is_cur, FN_REFLEN); else - (void) strmov(buff,path); /* Return org file name */ + (void) strnmov(buff, path, FN_REFLEN); /* Return org file name */ } else - (void) strxmov(buff,own_path_prefix,path,NullS); - strmov(to,buff); + (void) strxnmov(buff, FN_REFLEN, own_path_prefix, path, NullS); + strnmov(to, buff, FN_REFLEN); + to[FN_REFLEN-1]= '\0'; DBUG_PRINT("exit",("to: %s",to)); DBUG_RETURN(to); } /* my_load_path */ diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index c13a5581b80..4f7cd90e8aa 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -311,6 +311,9 @@ size_t normalize_dirname(char *to, const char *from) #endif buff[length - 1] != FN_LIBCHAR && buff[length - 1] != '/') { + /* we need reserve 2 bytes for the trailing slash and the zero */ + if (length >= sizeof (buff) - 1) + length= sizeof (buff) - 2; buff[length]= FN_LIBCHAR; buff[length + 1]= '\0'; } diff --git a/mysys/my_file.c b/mysys/my_file.c index ec0c9c425ea..a31673b31bc 100644 --- a/mysys/my_file.c +++ b/mysys/my_file.c @@ -72,7 +72,7 @@ static uint set_max_open_files(uint max_file_limit) } #else -static int set_max_open_files(uint max_file_limit) +static uint set_max_open_files(uint max_file_limit) { /* We don't know the limit. Return best guess */ return min(max_file_limit, OS_FILE_LIMIT); diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index 6ef8d571492..4182ea9826f 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -50,16 +50,21 @@ int my_getwd(char * buf, size_t size, myf MyFlags) DBUG_PRINT("my",("buf: 0x%lx size: %u MyFlags %d", (long) buf, (uint) size, MyFlags)); + if (size < 1) + DBUG_RETURN(-1); + if (curr_dir[0]) /* Current pos is saved here */ (void) strmake(buf,&curr_dir[0],size-1); else { #if defined(HAVE_GETCWD) + if (size < 2) + DBUG_RETURN(-1); if (!getcwd(buf,(uint) (size-2)) && MyFlags & MY_WME) { my_errno=errno; my_error(EE_GETWD,MYF(ME_BELL+ME_WAITTANG),errno); - return(-1); + DBUG_RETURN(-1); } #elif defined(HAVE_GETWD) { @@ -68,11 +73,13 @@ int my_getwd(char * buf, size_t size, myf MyFlags) strmake(buf,pathname,size-1); } #elif defined(VMS) + if (size < 2) + DBUG_RETURN(-1); if (!getcwd(buf,size-2,1) && MyFlags & MY_WME) { my_errno=errno; my_error(EE_GETWD,MYF(ME_BELL+ME_WAITTANG),errno); - return(-1); + DBUG_RETURN(-1); } intern_filename(buf,buf); #else |