From b2acafad44c306860bd42ae6b9278cafbe3dc659 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 27 Jul 2007 12:17:58 +0200 Subject: [PATCH] msvcrt: Fixed buffer allocation in _getcwd/_wgetcwd. --- dlls/msvcrt/dir.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c index 0232c4dae16..21a31153c8b 100644 --- a/dlls/msvcrt/dir.c +++ b/dlls/msvcrt/dir.c @@ -419,11 +419,10 @@ char* CDECL _getcwd(char * buf, int size) if (!buf) { - if (size < 0) - return _strdup(dir); - return msvcrt_strndup(dir,size); + if (size <= dir_len) size = dir_len + 1; + if (!(buf = MSVCRT_malloc( size ))) return NULL; } - if (dir_len >= size) + else if (dir_len >= size) { *MSVCRT__errno() = MSVCRT_ERANGE; return NULL; /* buf too small */ @@ -447,9 +446,8 @@ MSVCRT_wchar_t* CDECL _wgetcwd(MSVCRT_wchar_t * buf, int size) if (!buf) { - if (size < 0) - return _wcsdup(dir); - return msvcrt_wstrndup(dir,size); + if (size <= dir_len) size = dir_len + 1; + if (!(buf = MSVCRT_malloc( size * sizeof(WCHAR) ))) return NULL; } if (dir_len >= size) {