Alexandre Julliard : msvcrt: Fixed buffer allocation in _getcwd/_wgetcwd.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jul 27 07:34:37 CDT 2007


Module: wine
Branch: master
Commit: b2acafad44c306860bd42ae6b9278cafbe3dc659
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b2acafad44c306860bd42ae6b9278cafbe3dc659

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Jul 27 12:17:58 2007 +0200

msvcrt: Fixed buffer allocation in _getcwd/_wgetcwd.

---

 dlls/msvcrt/dir.c |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c
index 0232c4d..21a3115 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)
   {




More information about the wine-cvs mailing list