diff options
author | Martin Matuska <martin@matuska.org> | 2019-04-13 21:51:03 +0200 |
---|---|---|
committer | Martin Matuska <martin@matuska.org> | 2019-04-13 21:54:29 +0200 |
commit | b17df5e194724f7e83fa028471f00db1a78f511a (patch) | |
tree | 7459ca085ab92ad808fd5fb333b536ab5539824e /tar | |
parent | 40f72fed535be6a7236e91aef3aad641b71f9168 (diff) | |
download | libarchive-b17df5e194724f7e83fa028471f00db1a78f511a.tar.gz |
Windows symlink bugfixes and improvements
Treat targets ending with /. and /.. as directory symlinks
Explicitly test for file and directory symlinks
Improve debug output on test failure
Fix two memory allocations
Diffstat (limited to 'tar')
-rw-r--r-- | tar/test/test_basic.c | 2 | ||||
-rw-r--r-- | tar/test/test_copy.c | 2 | ||||
-rw-r--r-- | tar/test/test_option_H_upper.c | 26 | ||||
-rw-r--r-- | tar/test/test_option_L_upper.c | 18 | ||||
-rw-r--r-- | tar/test/test_option_U_upper.c | 6 | ||||
-rw-r--r-- | tar/test/test_option_s.c | 16 | ||||
-rw-r--r-- | tar/test/test_strip_components.c | 4 | ||||
-rw-r--r-- | tar/test/test_symlink_dir.c | 4 |
8 files changed, 39 insertions, 39 deletions
diff --git a/tar/test/test_basic.c b/tar/test/test_basic.c index 91282cde..9bb966a0 100644 --- a/tar/test/test_basic.c +++ b/tar/test/test_basic.c @@ -78,7 +78,7 @@ verify_files(const char *target) /* Symlink */ if (canSymlink()) - assertIsSymlink("symlink", "file"); + assertIsSymlink("symlink", "file", 0); /* dir */ failure("%s", target); diff --git a/tar/test/test_copy.c b/tar/test/test_copy.c index 1e59e192..b828666b 100644 --- a/tar/test/test_copy.c +++ b/tar/test/test_copy.c @@ -222,7 +222,7 @@ verify_tree(size_t limit) sprintf(name1, "s/%s", filenames[i]); sprintf(name2, "../f/%s", filenames[i]); if (strlen(name2) <= limit) - assertIsSymlink(name1, name2); + assertIsSymlink(name1, name2, 0); } /* Verify dir "d/abcdef...". */ diff --git a/tar/test/test_option_H_upper.c b/tar/test/test_option_H_upper.c index 7c201ce2..2c2ad33c 100644 --- a/tar/test/test_option_H_upper.c +++ b/tar/test/test_option_H_upper.c @@ -55,11 +55,11 @@ DEFINE_TEST(test_option_H_upper) assertChdir("test1"); assertEqualInt(0, systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); - assertIsSymlink("ld1", "d1"); - assertIsSymlink("d1/link1", "file1"); - assertIsSymlink("d1/linkX", "fileX"); - assertIsSymlink("link2", "d1/file2"); - assertIsSymlink("linkY", "d1/fileY"); + assertIsSymlink("ld1", "d1", 1); + assertIsSymlink("d1/link1", "file1", 0); + assertIsSymlink("d1/linkX", "fileX", 0); + assertIsSymlink("link2", "d1/file2", 0); + assertIsSymlink("linkY", "d1/fileY", 0); assertChdir(".."); /* Test 2: With -H, no symlink on command line. */ @@ -69,11 +69,11 @@ DEFINE_TEST(test_option_H_upper) assertChdir("test2"); assertEqualInt(0, systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); - assertIsSymlink("ld1", "d1"); - assertIsSymlink("d1/link1", "file1"); - assertIsSymlink("d1/linkX", "fileX"); - assertIsSymlink("link2", "d1/file2"); - assertIsSymlink("linkY", "d1/fileY"); + assertIsSymlink("ld1", "d1", 1); + assertIsSymlink("d1/link1", "file1", 0); + assertIsSymlink("d1/linkX", "fileX", 0); + assertIsSymlink("link2", "d1/file2", 0); + assertIsSymlink("linkY", "d1/fileY", 0); assertChdir(".."); /* Test 3: With -H, some symlinks on command line. */ @@ -84,9 +84,9 @@ DEFINE_TEST(test_option_H_upper) assertEqualInt(0, systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); assertIsDir("ld1", umasked(0755)); - assertIsSymlink("d1/linkX", "fileX"); - assertIsSymlink("d1/link1", "file1"); + assertIsSymlink("d1/linkX", "fileX", 0); + assertIsSymlink("d1/link1", "file1", 0); assertIsReg("link2", umasked(0644)); - assertIsSymlink("linkY", "d1/fileY"); + assertIsSymlink("linkY", "d1/fileY", 0); assertChdir(".."); } diff --git a/tar/test/test_option_L_upper.c b/tar/test/test_option_L_upper.c index 83f69d08..5697b0f2 100644 --- a/tar/test/test_option_L_upper.c +++ b/tar/test/test_option_L_upper.c @@ -55,11 +55,11 @@ DEFINE_TEST(test_option_L_upper) assertChdir("test1"); assertEqualInt(0, systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); - assertIsSymlink("ld1", "d1"); - assertIsSymlink("d1/link1", "file1"); - assertIsSymlink("d1/linkX", "fileX"); - assertIsSymlink("link2", "d1/file2"); - assertIsSymlink("linkY", "d1/fileY"); + assertIsSymlink("ld1", "d1", 1); + assertIsSymlink("d1/link1", "file1", 0); + assertIsSymlink("d1/linkX", "fileX", 0); + assertIsSymlink("link2", "d1/file2", 0); + assertIsSymlink("linkY", "d1/fileY", 0); assertChdir(".."); /* Test 2: With -L, no symlink on command line. */ @@ -71,9 +71,9 @@ DEFINE_TEST(test_option_L_upper) systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); assertIsDir("ld1", umasked(0755)); assertIsReg("d1/link1", umasked(0644)); - assertIsSymlink("d1/linkX", "fileX"); + assertIsSymlink("d1/linkX", "fileX", 0); assertIsReg("link2", umasked(0644)); - assertIsSymlink("linkY", "d1/fileY"); + assertIsSymlink("linkY", "d1/fileY", 0); assertChdir(".."); /* Test 3: With -L, some symlinks on command line. */ @@ -85,8 +85,8 @@ DEFINE_TEST(test_option_L_upper) systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); assertIsDir("ld1", umasked(0755)); assertIsReg("d1/link1", umasked(0644)); - assertIsSymlink("d1/linkX", "fileX"); + assertIsSymlink("d1/linkX", "fileX", 0); assertIsReg("link2", umasked(0644)); - assertIsSymlink("linkY", "d1/fileY"); + assertIsSymlink("linkY", "d1/fileY", 0); assertChdir(".."); } diff --git a/tar/test/test_option_U_upper.c b/tar/test/test_option_U_upper.c index 83205486..d864e13c 100644 --- a/tar/test/test_option_U_upper.c +++ b/tar/test/test_option_U_upper.c @@ -82,7 +82,7 @@ DEFINE_TEST(test_option_U_upper) assertMakeSymlink("d1", "realDir", 1); r = systemf("%s -xf ../archive.tar d1/file1 >test.out 2>test.err", testprog); assert(r != 0); - assertIsSymlink("d1", "realDir"); + assertIsSymlink("d1", "realDir", 1); assertFileNotExists("d1/file1"); assertEmptyFile("test.out"); assertNonEmptyFile("test.err"); @@ -108,7 +108,7 @@ DEFINE_TEST(test_option_U_upper) assertMakeSymlink("d1", "realDir", 1); assertEqualInt(0, systemf("%s -xPf ../archive.tar d1/file1 >test.out 2>test.err", testprog)); - assertIsSymlink("d1", "realDir"); + assertIsSymlink("d1", "realDir", 1); assertFileContents("d1/file1", 8, "d1/file1"); assertEmptyFile("test.out"); assertEmptyFile("test.err"); @@ -121,7 +121,7 @@ DEFINE_TEST(test_option_U_upper) assertMakeSymlink("d1", "realDir", 1); assertEqualInt(0, systemf("%s -xPUf ../archive.tar d1/file1 >test.out 2>test.err", testprog)); - assertIsSymlink("d1", "realDir"); + assertIsSymlink("d1", "realDir", 1); assertFileContents("d1/file1", 8, "d1/file1"); assertEmptyFile("test.out"); assertEmptyFile("test.err"); diff --git a/tar/test/test_option_s.c b/tar/test/test_option_s.c index a0896606..09c72ee7 100644 --- a/tar/test/test_option_s.c +++ b/tar/test/test_option_s.c @@ -109,14 +109,14 @@ DEFINE_TEST(test_option_s) testprog, testprog); assertFileContents("realfile", 8, "test6a/in/d2/realfile"); assertFileContents("realfile", 8, "test6a/in/d2/symlink"); - assertIsSymlink("test6a/in/d2/symlink", "realfile"); + assertIsSymlink("test6a/in/d2/symlink", "realfile", 0); /* At creation time. */ assertMakeDir("test6b", 0755); systemf("%s -cf - -s /d1/d2/ in/d1 | %s -xf - -C test6b", testprog, testprog); assertFileContents("realfile", 8, "test6b/in/d2/realfile"); assertFileContents("realfile", 8, "test6b/in/d2/symlink"); - assertIsSymlink("test6b/in/d2/symlink", "realfile"); + assertIsSymlink("test6b/in/d2/symlink", "realfile", 0); } /* @@ -129,14 +129,14 @@ DEFINE_TEST(test_option_s) testprog, testprog); assertFileContents("realfile", 8, "test7a/in/d1/realfile-renamed"); assertFileContents("realfile", 8, "test7a/in/d1/symlink"); - assertIsSymlink("test7a/in/d1/symlink", "realfile-renamed"); + assertIsSymlink("test7a/in/d1/symlink", "realfile-renamed", 0); /* At creation. */ assertMakeDir("test7b", 0755); systemf("%s -cf - -s /realfile/realfile-renamed/ in/d1 | %s -xf - -C test7b", testprog, testprog); assertFileContents("realfile", 8, "test7b/in/d1/realfile-renamed"); assertFileContents("realfile", 8, "test7b/in/d1/symlink"); - assertIsSymlink("test7b/in/d1/symlink", "realfile-renamed"); + assertIsSymlink("test7b/in/d1/symlink", "realfile-renamed", 0); } /* @@ -192,7 +192,7 @@ DEFINE_TEST(test_option_s) assertFileContents("realfile", 8, "test10a/in/d1/foo"); assertFileContents("foo", 3, "test10a/in/d1/realfile"); assertFileContents("foo", 3, "test10a/in/d1/symlink"); - assertIsSymlink("test10a/in/d1/symlink", "realfile"); + assertIsSymlink("test10a/in/d1/symlink", "realfile", 0); /* At creation. */ assertMakeDir("test10b", 0755); systemf("%s -cf - -s /realfile/foo/S -s /foo/realfile/ in/d1 | %s -xf - -C test10b", @@ -200,7 +200,7 @@ DEFINE_TEST(test_option_s) assertFileContents("realfile", 8, "test10b/in/d1/foo"); assertFileContents("foo", 3, "test10b/in/d1/realfile"); assertFileContents("foo", 3, "test10b/in/d1/symlink"); - assertIsSymlink("test10b/in/d1/symlink", "realfile"); + assertIsSymlink("test10b/in/d1/symlink", "realfile", 0); } /* @@ -214,7 +214,7 @@ DEFINE_TEST(test_option_s) assertFileContents("foo", 3, "test11a/in/d1/foo"); assertFileContents("realfile", 8, "test11a/in/d1/realfile"); assertFileContents("foo", 3, "test11a/in/d1/symlink"); - assertIsSymlink("test11a/in/d1/symlink", "foo"); + assertIsSymlink("test11a/in/d1/symlink", "foo", 0); /* At creation. */ assertMakeDir("test11b", 0755); systemf("%s -cf - -s /realfile/foo/R in/d1 | %s -xf - -C test11b", @@ -222,7 +222,7 @@ DEFINE_TEST(test_option_s) assertFileContents("foo", 3, "test11b/in/d1/foo"); assertFileContents("realfile", 8, "test11b/in/d1/realfile"); assertFileContents("foo", 3, "test11b/in/d1/symlink"); - assertIsSymlink("test11b/in/d1/symlink", "foo"); + assertIsSymlink("test11b/in/d1/symlink", "foo", 0); } /* diff --git a/tar/test/test_strip_components.c b/tar/test/test_strip_components.c index caf45a3e..090fb0db 100644 --- a/tar/test/test_strip_components.c +++ b/tar/test/test_strip_components.c @@ -65,7 +65,7 @@ DEFINE_TEST(test_strip_components) /* If platform supports symlinks, target/s2 is a broken symlink. */ /* If platform does not support symlink, target/s2 doesn't exist. */ if (canSymlink()) - assertIsSymlink("target/s2", "d2/f1"); + assertIsSymlink("target/s2", "d2/f1", 0); else assertFileNotExists("target/s2"); failure("d0/d1/d2 should be extracted"); @@ -123,7 +123,7 @@ DEFINE_TEST(test_strip_components) /* If platform supports symlinks, target/s2 is included. */ if (canSymlink()) { failure("d0/d1/s2 is a symlink to something included in archive"); - assertIsSymlink("target2/s2", "d2/f1"); + assertIsSymlink("target2/s2", "d2/f1", 0); } failure("d0/d1/d2 should be archived"); assertIsDir("target2/d2", -1); diff --git a/tar/test/test_symlink_dir.c b/tar/test/test_symlink_dir.c index 485ab32f..5836647c 100644 --- a/tar/test/test_symlink_dir.c +++ b/tar/test/test_symlink_dir.c @@ -132,8 +132,8 @@ DEFINE_TEST(test_symlink_dir) /* dest2/dir and dest2/dir4 symlinks should be followed */ if (canSymlink()) { - assertIsSymlink("dest2/dir", "real_dir"); - assertIsSymlink("dest2/dir4", "real_dir"); + assertIsSymlink("dest2/dir", "real_dir", 1); + assertIsSymlink("dest2/dir4", "real_dir", 1); assertIsDir("dest2/real_dir", -1); } |