Fixes for makepath

Warren_Baird at cimmetry.com Warren_Baird at cimmetry.com
Thu Feb 6 08:43:19 CST 2003



ChangeLog:

     1. Avoid possible seg fault when calling TRACE with NULL string pointers.
     2. Fix bad side-effect of makepath on input parameters.

Description:

     2. Use a temporary buffer for the output path generation process instead
     of the output parameter directly. Otherwise, problems can occur in the case
     when the output string pointer is the same as one of the input parameter.
     Windows makepath function doesn't suffer from this bug.

Warren Baird : Warren_Baird at cimmetry.com
Dave Belanger
Louis Thibault

diff -ur clean/wine/dlls/msvcrt/dir.c wine/dlls/msvcrt/dir.c
--- clean/wine/dlls/msvcrt/dir.c   Wed Jan 29 15:30:35 2003
+++ wine/dlls/msvcrt/dir.c    Mon Feb  3 11:52:55 2003
@@ -677,37 +677,43 @@
                               const char * extension )
 {
     char ch;
-    TRACE("got %s %s %s %s\n", drive, directory,
-          filename, extension);
+    char tmpPath[MAX_PATH];
+    TRACE("got %s %s %s %s\n",
+           drive ? drive : "",
+           directory ? directory : "",
+           filename ? filename : "",
+           extension ? extension : "");

     if ( !path )
         return;

-    path[0] = 0;
+    tmpPath[0] = '\0';
     if (drive && drive[0])
     {
-        path[0] = drive[0];
-        path[1] = ':';
-        path[2] = 0;
+        tmpPath[0] = drive[0];
+        tmpPath[1] = ':';
+        tmpPath[2] = 0;
     }
     if (directory && directory[0])
     {
-        strcat(path, directory);
-        ch = path[strlen(path)-1];
+        strcat(tmpPath, directory);
+        ch = tmpPath[strlen(tmpPath)-1];
         if (ch != '/' && ch != '\\')
-            strcat(path,"\\");
+            strcat(tmpPath,"\\");
     }
     if (filename && filename[0])
     {
-        strcat(path, filename);
+        strcat(tmpPath, filename);
         if (extension && extension[0])
         {
             if ( extension[0] != '.' )
-                strcat(path,".");
-            strcat(path,extension);
+                strcat(tmpPath,".");
+            strcat(tmpPath,extension);
         }
     }
-
+
+    strcpy( path, tmpPath );
+
     TRACE("returning %s\n",path);
 }






More information about the wine-patches mailing list