]> 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>
Fri, 30 Dec 2011 17:32:19 +0000 (12:32 -0500)
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 17d53cfb49499a418972df8b6e273be2c74472ba..3ef9f40dfa89df444e7e5b8ca60498b9587d0173 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 d12078f8bdfd45f98e9784800655fcb76855bec1..4be38d6394c1c6cd22c8ac325ebca5066b708357 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 3d9ee3b6160cb2f01a49935bb1e0f28251e81361..51ae5f2c87d67dd1976764d13b40edf261d6af85 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)] = '/';
        }