diff options
Diffstat (limited to 'contrib/libarchive/libarchive/test/test_read_format_zip.c')
-rw-r--r-- | contrib/libarchive/libarchive/test/test_read_format_zip.c | 163 |
1 files changed, 155 insertions, 8 deletions
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip.c b/contrib/libarchive/libarchive/test/test_read_format_zip.c index 1ef173ca79eb..9e820f509c19 100644 --- a/contrib/libarchive/libarchive/test/test_read_format_zip.c +++ b/contrib/libarchive/libarchive/test/test_read_format_zip.c @@ -24,7 +24,6 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "test.h" -__FBSDID("$FreeBSD$"); #define __LIBARCHIVE_BUILD #include <archive_crc32.h> @@ -157,7 +156,7 @@ verify_basic(struct archive *a, int seek_checks) if (archive_zlib_version() != NULL) { failure("file2 has a bad CRC, so read should fail and not change buff"); memset(buff, 'a', 19); - assertEqualInt(ARCHIVE_WARN, archive_read_data(a, buff, 19)); + assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19)); assertEqualMem(buff, "aaaaaaaaaaaaaaaaaaa", 19); } else { assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19)); @@ -736,6 +735,134 @@ DEFINE_TEST(test_read_format_zip_bzip2_multi_blockread) assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); } +DEFINE_TEST(test_read_format_zip_zstd_one_file) +{ + const char *refname = "test_read_format_zip_zstd.zipx"; + struct archive *a; + struct archive_entry *ae; + + assert((a = archive_read_new()) != NULL); + if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) { + skipping("zstd is not fully supported on this platform"); + archive_read_close(a); + archive_read_free(a); + return; + } + extract_reference_file(refname); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("vimrc", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one(a, ae, 0xBA8E3BAA)); + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); +} + +DEFINE_TEST(test_read_format_zip_zstd_one_file_blockread) +{ + const char *refname = "test_read_format_zip_zstd.zipx"; + struct archive *a; + struct archive_entry *ae; + + assert((a = archive_read_new()) != NULL); + if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) { + skipping("zstd is not fully supported on this platform"); + archive_read_close(a); + archive_read_free(a); + return; + } + extract_reference_file(refname); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("vimrc", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one_using_blocks(a, 13, 0xBA8E3BAA)); + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); +} + +DEFINE_TEST(test_read_format_zip_zstd_multi) +{ + const char *refname = "test_read_format_zip_zstd_multi.zipx"; + struct archive *a; + struct archive_entry *ae; + + assert((a = archive_read_new()) != NULL); + if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) { + skipping("zstd is not fully supported on this platform"); + archive_read_close(a); + archive_read_free(a); + return; + } + extract_reference_file(refname); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("smartd.conf", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one(a, ae, 0x8DD7379E)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("ts.conf", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one(a, ae, 0x7AE59B31)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("vimrc", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one(a, ae, 0xBA8E3BAA)); + + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); +} + +DEFINE_TEST(test_read_format_zip_zstd_multi_blockread) +{ + const char *refname = "test_read_format_zip_zstd_multi.zipx"; + struct archive *a; + struct archive_entry *ae; + + assert((a = archive_read_new()) != NULL); + if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) { + skipping("zstd is not fully supported on this platform"); + archive_read_close(a); + archive_read_free(a); + return; + } + extract_reference_file(refname); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("smartd.conf", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one_using_blocks(a, 12, 0x8DD7379E)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("ts.conf", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one_using_blocks(a, 13, 0x7AE59B31)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a)); + assertEqualString("vimrc", archive_entry_pathname(ae)); + assertEqualIntA(a, 0, extract_one_using_blocks(a, 14, 0xBA8E3BAA)); + + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); +} + DEFINE_TEST(test_read_format_zip_xz_multi) { const char *refname = "test_read_format_zip_xz_multi.zipx"; @@ -893,6 +1020,7 @@ DEFINE_TEST(test_read_format_zip_lzma_alone_leak) if(ARCHIVE_OK != archive_read_support_filter_lzma(a)) { skipping("lzma reading is not fully supported on this platform"); archive_read_close(a); + archive_read_free(a); return; } @@ -1004,6 +1132,7 @@ DEFINE_TEST(test_read_format_zip_7z_deflate) const char *refname = "test_read_format_zip_7z_deflate.zip"; struct archive_entry *ae; struct archive *a; + int r; assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); @@ -1013,15 +1142,33 @@ DEFINE_TEST(test_read_format_zip_7z_deflate) assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 10240)); //read first symlink - assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + r = archive_read_next_header(a, &ae); + if (archive_zlib_version() == NULL) { + assertEqualInt(ARCHIVE_FAILED, r); + assertEqualString(archive_error_string(a), + "Unsupported ZIP compression method during decompression " + "of link entry (8: deflation)"); + assert(archive_errno(a) != 0); + } else { + assertEqualIntA(a, ARCHIVE_OK, r); + assertEqualString("libxkbcommon-x11.so.0.0.0", + archive_entry_symlink(ae)); + } assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); - assertEqualString("libxkbcommon-x11.so.0.0.0", - archive_entry_symlink(ae)); //read second symlink - assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + r = archive_read_next_header(a, &ae); + if (archive_zlib_version() == NULL) { + assertEqualInt(ARCHIVE_FAILED, r); + assertEqualString(archive_error_string(a), + "Unsupported ZIP compression method during decompression " + "of link entry (8: deflation)"); + assert(archive_errno(a) != 0); + } else { + assertEqualIntA(a, ARCHIVE_OK, r); + assertEqualString("libxkbcommon-x11.so.0.0.0", + archive_entry_symlink(ae)); + } assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); - assertEqualString("libxkbcommon-x11.so.0.0.0", - archive_entry_symlink(ae)); assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a)); } |