Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/libarchive/dist/libarchive/test PR/55612: Marti...



details:   https://anonhg.NetBSD.org/src/rev/c83bb5c3c95f
branches:  trunk
changeset: 937907:c83bb5c3c95f
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Aug 28 18:44:54 2020 +0000

description:
PR/55612: Martin Husemann: libarchive tests pollute /tmp w/o cleanup
Make tests obey $TMPDIR.

diffstat:

 external/bsd/libarchive/dist/libarchive/test/test_write_disk_secure.c |  41 +++++++--
 1 files changed, 29 insertions(+), 12 deletions(-)

diffs (92 lines):

diff -r 96066b2b8c5c -r c83bb5c3c95f external/bsd/libarchive/dist/libarchive/test/test_write_disk_secure.c
--- a/external/bsd/libarchive/dist/libarchive/test/test_write_disk_secure.c     Fri Aug 28 18:34:45 2020 +0000
+++ b/external/bsd/libarchive/dist/libarchive/test/test_write_disk_secure.c     Fri Aug 28 18:44:54 2020 +0000
@@ -40,6 +40,16 @@
        struct archive *a;
        struct archive_entry *ae;
        struct stat st;
+       char tmp[2048];
+       const char *tmpdir;
+       const char *lname =
+           "libarchive_test-test_write_disk_secure-absolute_symlink";
+#if 0
+       const char *fname =
+           "libarchive_test-test_write_disk_secure-absolute_symlink_path.tmp";
+#endif
+       const char *pname =
+           "libarchive_test-test_write_disk_secure-absolute_path.tmp";
 
        /* Start with a known umask. */
        assertUmask(UMASK);
@@ -86,12 +96,15 @@
        assert(0 == archive_write_finish_entry(a));
 #endif
 
-       /* Write an absolute symlink to /tmp. */
+       /* Write an absolute symlink to $TMPDIR. */
        archive_write_disk_set_options(a, ARCHIVE_EXTRACT_SECURE_SYMLINKS);
        assert((ae = archive_entry_new()) != NULL);
-       archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_symlink");
+       if ((tmpdir = getenv("TMPDIR")) == NULL)
+               tmpdir = "/tmp";
+       snprintf(tmp, sizeof(tmp), "%s/%s", tmpdir, lname);
+       archive_entry_copy_pathname(ae, tmp);
        archive_entry_set_mode(ae, S_IFLNK | 0777);
-       archive_entry_set_symlink(ae, "/tmp");
+       archive_entry_set_symlink(ae, tmpdir);
        archive_write_disk_set_options(a, 0);
        assert(0 == archive_write_header(a, ae));
        assert(0 == archive_write_finish_entry(a));
@@ -99,15 +112,18 @@
 #if 0
        /* With security checks enabled, this should fail. */
        assert(archive_entry_clear(ae) != NULL);
-       archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_symlink/libarchive_test-test_write_disk_secure-absolute_symlink_path.tmp");
+       snprintf(tmp, sizeof(tmp), "%s/%s/%s", tmpdir, lname, fname);
+       archive_entry_copy_pathname(ae, tmp);
        archive_entry_set_mode(ae, S_IFREG | 0777);
        archive_write_disk_set_options(a, ARCHIVE_EXTRACT_SECURE_SYMLINKS);
        failure("Extracting a file through an absolute symlink should fail here.");
        assertEqualInt(ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
-       assertFileNotExists("/tmp/libarchive_test-test_write_disk_secure-absolute_symlink/libarchive_test-test_write_disk_secure-absolute_symlink_path.tmp");
-       assert(0 == unlink("/tmp/libarchive_test-test_write_disk_secure-absolute_symlink"));
-       unlink("/tmp/libarchive_test-test_write_disk_secure-absolute_symlink_path.tmp");
+       assertFileNotExists(tmp);
+       snprintf(tmp, sizeof(tmp), "%s/%s", tmpdir, lname);
+       assert(0 == unlink(tmp));
+       snprintf(tmp, sizeof(tmp), "%s/%s", tmpdir, fname);
+       unlink(tmp);
 #endif
 
        /* Create another link. */
@@ -230,23 +246,24 @@
         * extract an absolute path.
         */
        assert((ae = archive_entry_new()) != NULL);
-       archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
+       snprintf(tmp, sizeof(tmp), "%s/%s", tmpdir, pname);
+       archive_entry_copy_pathname(ae, tmp);
        archive_entry_set_mode(ae, S_IFREG | 0777);
        assert(0 == archive_write_header(a, ae));
        assert(0 == archive_write_finish_entry(a));
-       assertFileExists("/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
-       assert(0 == unlink("/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp"));
+       assertFileExists(tmp);
+       assert(0 == unlink(tmp));
 
        /* But with security checks enabled, this should fail. */
        assert(archive_entry_clear(ae) != NULL);
-       archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
+       archive_entry_copy_pathname(ae, tmp);
        archive_entry_set_mode(ae, S_IFREG | 0777);
        archive_write_disk_set_options(a, ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS);
        failure("Extracting an absolute path should fail here.");
        assertEqualInt(ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
        assert(0 == archive_write_finish_entry(a));
-       assertFileNotExists("/tmp/libarchive_test-test_write_disk_secure-absolute_path.tmp");
+       assertFileNotExists(tmp);
 
        assertEqualInt(ARCHIVE_OK, archive_write_free(a));
 



Home | Main Index | Thread Index | Old Index