Merge pull request #3239 from datauwu/warc-require-size
This commit is contained in:
2 files changed
+38
-1
No files matched your search
@@ -233,10 +233,22 @@ _warc_header(struct archive_write *a, struct archive_entry *entry)
|
||||
/*len*/0,
|
||||
};
|
||||
ssize_t r;
|
||||
int64_t size;
|
||||
rh.tgturi = archive_entry_pathname(entry);
|
||||
rh.rtime = w->now;
|
||||
rh.mtime = archive_entry_mtime(entry);
|
||||
rh.cntlen = (size_t)archive_entry_size(entry);
|
||||
if (!archive_entry_size_is_set(entry)) {
|
||||
archive_set_error(&a->archive, -1,
|
||||
"Size required");
|
||||
return (ARCHIVE_FAILED);
|
||||
}
|
||||
size = archive_entry_size(entry);
|
||||
if (size < 0) {
|
||||
archive_set_error(&a->archive, -1,
|
||||
"Size required");
|
||||
return (ARCHIVE_FAILED);
|
||||
}
|
||||
rh.cntlen = (uint64_t)size;
|
||||
|
||||
archive_string_init(&hdr);
|
||||
r = _popul_ehdr(&hdr, MAX_HDR_SIZE, rh);
|
||||
|
||||
@@ -143,3 +143,28 @@ DEFINE_TEST(test_write_format_warc)
|
||||
|
||||
free(buff);
|
||||
}
|
||||
|
||||
DEFINE_TEST(test_write_format_warc_size)
|
||||
{
|
||||
struct archive *a;
|
||||
struct archive_entry *ae;
|
||||
char buff[2048];
|
||||
size_t used;
|
||||
|
||||
memset(buff, 0, sizeof(buff));
|
||||
assert((a = archive_write_new()) != NULL);
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_warc(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_write_open_memory(a, buff, sizeof(buff), &used));
|
||||
|
||||
assert((ae = archive_entry_new()) != NULL);
|
||||
archive_entry_set_pathname(ae, "test");
|
||||
archive_entry_set_filetype(ae, AE_IFREG);
|
||||
assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
|
||||
assertEqualString("Size required", archive_error_string(a));
|
||||
archive_entry_free(ae);
|
||||
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
|
||||
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
|
||||
}
|
||||
Reference in new issue
Block a user