summaryrefslogtreecommitdiff
path: root/mysys/my_getwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'mysys/my_getwd.c')
-rw-r--r--mysys/my_getwd.c11
1 files changed, 9 insertions, 2 deletions
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