}
static void
-verify_file0_stream(struct archive *a)
+verify_file0_stream(struct archive *a, int size_known)
{
struct archive_entry *ae;
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("-", archive_entry_pathname(ae));
assertEqualInt(AE_IFREG | 0664, archive_entry_mode(ae));
- assertEqualInt(0, archive_entry_size_is_set(ae));
+ if (size_known) {
+ // zip64b has the uncompressed size at the beginning,
+ // plus CRC and compressed size using length-at-end.
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(6, archive_entry_size(ae));
+ } else {
+ // zip64a does not have a size at the beginning at all.
+ assert(!archive_entry_size_is_set(ae));
+ }
#ifdef HAVE_ZLIB_H
{
char data[16];
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip_streamable(a));
assertEqualIntA(a, ARCHIVE_OK, read_open_memory_seek(a, p, s, 1));
- verify_file0_stream(a);
+ verify_file0_stream(a, 0);
free(p);
}
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip_streamable(a));
assertEqualIntA(a, ARCHIVE_OK, read_open_memory_seek(a, p, s, 1));
- verify_file0_stream(a);
+ verify_file0_stream(a, 1);
free(p);
}
assertEqualString("file", archive_entry_pathname(ae));
if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(8, archive_entry_size(ae));
- } else {
- assertEqualInt(0, archive_entry_size_is_set(ae));
}
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(8, archive_entry_size(ae));
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "12345678", 8);
assertEqualString("file2", archive_entry_pathname(ae));
if (seeking) {
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(4, archive_entry_size(ae));
- } else {
- assertEqualInt(0, archive_entry_size_is_set(ae));
}
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "1234", 4);
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file_deflate", archive_entry_pathname(ae));
- if (seeking) {
+ if (seeking)
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(8, archive_entry_size(ae));
- } else {
- assertEqualInt(0, archive_entry_size(ae));
- }
+ assertEqualInt(8, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "12345678", 8);
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file2_deflate", archive_entry_pathname(ae));
- if (seeking) {
+ if (seeking)
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assertEqualInt(4, archive_entry_size(ae));
- } else {
- assertEqualInt(0, archive_entry_size(ae));
- }
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "1234", 4);
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file_stored", archive_entry_pathname(ae));
- if (seeking) {
+ if (seeking)
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- assert(archive_entry_size_is_set(ae));
- assertEqualInt(8, archive_entry_size(ae));
- } else {
- assertEqualInt(0, archive_entry_size_is_set(ae));
- }
+ assert(archive_entry_size_is_set(ae));
+ assertEqualInt(8, archive_entry_size(ae));
assertEqualIntA(a, 8,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "12345678", 8);
assertEqualInt(0, archive_entry_atime(ae));
assertEqualInt(0, archive_entry_ctime(ae));
assertEqualString("file2_stored", archive_entry_pathname(ae));
- if (seeking) {
- assertEqualInt(4, archive_entry_size(ae));
+ if (seeking)
assertEqualInt(AE_IFREG | 0755, archive_entry_mode(ae));
- } else {
- assertEqualInt(0, archive_entry_size_is_set(ae));
- }
+ assertEqualInt(4, archive_entry_size(ae));
+ assert(archive_entry_size_is_set(ae));
assertEqualIntA(a, 4,
archive_read_data(a, filedata, sizeof(filedata)));
assertEqualMem(filedata, "ACEG", 4);