diff options
author | Andrew Gregory <andrew.gregory.8@gmail.com> | 2016-02-22 21:17:20 -0500 |
---|---|---|
committer | Andrew Gregory <andrew.gregory.8@gmail.com> | 2016-02-22 23:23:23 -0500 |
commit | 0e152465f8107c6cfc5f9519be4768de0b22efd6 (patch) | |
tree | eeaaef56456e42c2b143a10328d5d1f19d4f86f5 /libarchive/test/test_write_disk_secure.c | |
parent | 41ae0cf83bd0c144d0f4c296223341e54513eebd (diff) | |
download | libarchive-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.c | 21 |
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"); |