]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Improve test utilities to correctly detect the Windows style of full path that starts...
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Fri, 30 Dec 2011 17:32:19 +0000 (12:32 -0500)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sat, 18 Feb 2012 19:53:32 +0000 (04:53 +0900)
Building full path name in test utilities should use memmove instead of strcpy because it is
possible that an original path name should overlap itself when moving the path.

SVN-Revision: 4040

cpio/test/main.c
libarchive/test/main.c
tar/test/main.c

index a0c5295860c7872a6510c7bd063c92e3f710a811..0e040591b4d77dae9d7737132fc149e268ee0571 100644 (file)
@@ -2289,7 +2289,15 @@ main(int argc, char **argv)
                j++;
        }
        testprogdir[i] = '\0';
+#if defined(_WIN32) && !defined(__CYGWIN__)
+       if (testprogdir[0] != '/' && testprogdir[0] != '\\' &&
+           !(((testprogdir[0] >= 'a' && testprogdir[0] <= 'z') ||
+              (testprogdir[0] >= 'A' && testprogdir[0] <= 'Z')) &&
+               testprogdir[1] == ':' &&
+               (testprogdir[2] == '/' || testprogdir[2] == '\\')))
+#else
        if (testprogdir[0] != '/')
+#endif
        {
                /* Fixup path for relative directories. */
                if ((testprogdir = (char *)realloc(testprogdir,
@@ -2298,8 +2306,9 @@ main(int argc, char **argv)
                        fprintf(stderr, "ERROR: Out of memory.");
                        exit(1);
                }
-               strcpy(testprogdir + strlen(pwd) + 1, testprogdir);
-               strcpy(testprogdir, pwd);
+               memmove(testprogdir + strlen(pwd) + 1, testprogdir,
+                   strlen(testprogdir));
+               memcpy(testprogdir, pwd, strlen(pwd));
                testprogdir[strlen(pwd)] = '/';
        }
 
index 386b10b500b1ba0934f365d456376cc035184be3..c07d2d2519774911a90e49278e64285435565b0b 100644 (file)
@@ -2287,7 +2287,15 @@ main(int argc, char **argv)
                j++;
        }
        testprogdir[i] = '\0';
+#if defined(_WIN32) && !defined(__CYGWIN__)
+       if (testprogdir[0] != '/' && testprogdir[0] != '\\' &&
+           !(((testprogdir[0] >= 'a' && testprogdir[0] <= 'z') ||
+              (testprogdir[0] >= 'A' && testprogdir[0] <= 'Z')) &&
+               testprogdir[1] == ':' &&
+               (testprogdir[2] == '/' || testprogdir[2] == '\\')))
+#else
        if (testprogdir[0] != '/')
+#endif
        {
                /* Fixup path for relative directories. */
                if ((testprogdir = (char *)realloc(testprogdir,
@@ -2296,8 +2304,9 @@ main(int argc, char **argv)
                        fprintf(stderr, "ERROR: Out of memory.");
                        exit(1);
                }
-               strcpy(testprogdir + strlen(pwd) + 1, testprogdir);
-               strcpy(testprogdir, pwd);
+               memmove(testprogdir + strlen(pwd) + 1, testprogdir,
+                   strlen(testprogdir));
+               memcpy(testprogdir, pwd, strlen(pwd));
                testprogdir[strlen(pwd)] = '/';
        }
 
index 984b4cea9185c72d10503b122d095491fb7fc37f..d9bd4de3cfa302c52eb427ee3b28599496718951 100644 (file)
@@ -2289,7 +2289,15 @@ main(int argc, char **argv)
                j++;
        }
        testprogdir[i] = '\0';
+#if defined(_WIN32) && !defined(__CYGWIN__)
+       if (testprogdir[0] != '/' && testprogdir[0] != '\\' &&
+           !(((testprogdir[0] >= 'a' && testprogdir[0] <= 'z') ||
+              (testprogdir[0] >= 'A' && testprogdir[0] <= 'Z')) &&
+               testprogdir[1] == ':' &&
+               (testprogdir[2] == '/' || testprogdir[2] == '\\')))
+#else
        if (testprogdir[0] != '/')
+#endif
        {
                /* Fixup path for relative directories. */
                if ((testprogdir = (char *)realloc(testprogdir,
@@ -2298,8 +2306,9 @@ main(int argc, char **argv)
                        fprintf(stderr, "ERROR: Out of memory.");
                        exit(1);
                }
-               strcpy(testprogdir + strlen(pwd) + 1, testprogdir);
-               strcpy(testprogdir, pwd);
+               memmove(testprogdir + strlen(pwd) + 1, testprogdir,
+                   strlen(testprogdir));
+               memcpy(testprogdir, pwd, strlen(pwd));
                testprogdir[strlen(pwd)] = '/';
        }