summaryrefslogtreecommitdiff
path: root/libarchive/test/test_write_disk_secure.c
diff options
context:
space:
mode:
authorAndrew Gregory <andrew.gregory.8@gmail.com>2016-02-22 21:17:20 -0500
committerAndrew Gregory <andrew.gregory.8@gmail.com>2016-02-22 23:23:23 -0500
commit0e152465f8107c6cfc5f9519be4768de0b22efd6 (patch)
treeeeaaef56456e42c2b143a10328d5d1f19d4f86f5 /libarchive/test/test_write_disk_secure.c
parent41ae0cf83bd0c144d0f4c296223341e54513eebd (diff)
downloadlibarchive-0e152465f8107c6cfc5f9519be4768de0b22efd6.tar.gz
add test for SECURE_SYMLINKS with absolute path
Diffstat (limited to 'libarchive/test/test_write_disk_secure.c')
-rw-r--r--libarchive/test/test_write_disk_secure.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/libarchive/test/test_write_disk_secure.c b/libarchive/test/test_write_disk_secure.c
index 4d67ce6f..7cd66c41 100644
--- a/libarchive/test/test_write_disk_secure.c
+++ b/libarchive/test/test_write_disk_secure.c
@@ -84,6 +84,27 @@ DEFINE_TEST(test_write_disk_secure)
archive_entry_free(ae);
assert(0 == archive_write_finish_entry(a));
+ /* Write an absolute symlink to /tmp. */
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_copy_pathname(ae, "/tmp/libarchive_test-test_write_disk_secure-absolute_symlink");
+ archive_entry_set_mode(ae, S_IFLNK | 0777);
+ archive_entry_set_symlink(ae, "/tmp");
+ archive_write_disk_set_options(a, 0);
+ assert(0 == archive_write_header(a, ae));
+ assert(0 == archive_write_finish_entry(a));
+
+ /* 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");
+ 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");
+
/* Create another link. */
assert((ae = archive_entry_new()) != NULL);
archive_entry_copy_pathname(ae, "link_to_dir2");