]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Tests, heed Tim's advice and emit ARCHIVE_FAILED for entries ...
authorSebastian Freundt <freundt@ga-group.nl>
Tue, 10 Jun 2014 10:40:45 +0000 (10:40 +0000)
committerSebastian Freundt <freundt@ga-group.nl>
Tue, 10 Jun 2014 10:42:06 +0000 (10:42 +0000)
that cannot be stored (natively) in WARC format.

libarchive/archive_write_set_format_warc.c
libarchive/test/test_write_format_warc.c
libarchive/test/test_write_format_warc_empty.c

index 90d86810912c0a2e6fc749ab518b977e4bd0590d..f16c8b1a277a1c2fd3173f69335143658decf59e 100644 (file)
@@ -243,9 +243,14 @@ _warc_header(struct archive_write *a, struct archive_entry *entry)
                __archive_write_output(a, hdr, r);
                /* and let subsequent calls to _data() know about the size */
                w->populz = rh.cntlen;
+               return (ARCHIVE_OK);
        }
-       /* just pretend it's all good */
-       return (ARCHIVE_OK);
+       /* just resort to erroring as per Tim's advice */
+       archive_set_error(
+               &a->archive,
+               ARCHIVE_ERRNO_FILE_FORMAT,
+               "WARC can only process regular files");
+       return (ARCHIVE_FAILED);
 }
 
 static ssize_t
index cc8f3ca1dc40f3694eecc69a7c5973608fb70137..60d1898fa1688d2b313366923d3b3eabd38cc474 100644 (file)
@@ -111,11 +111,22 @@ DEFINE_TEST(test_write_format_warc)
        archive_entry_copy_pathname(ae, "dir");
        archive_entry_set_filetype(ae, AE_IFDIR);
        archive_entry_set_size(ae, 512);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
        assertEqualInt(ARCHIVE_OK, archive_write_free(a));
 
+       /* test whether last archive is indeed empty */
+       assert((a = archive_read_new()) != NULL);
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used));
+
+       /* Test EOF */
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
        free(buff);
 }
index 1b3206a07110a5055396fca12735a4d51af1d60c..905536e265154c8de5e87b5b2ebcb4b14799cc1b 100644 (file)
@@ -47,7 +47,7 @@ DEFINE_TEST(test_write_format_warc_empty)
        archive_entry_set_mtime(ae, 5, 0);
        archive_entry_copy_pathname(ae, ".");
        archive_entry_set_mode(ae, S_IFDIR | 0755);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        /* Add ".." entry which must be ignored. */ 
@@ -57,7 +57,7 @@ DEFINE_TEST(test_write_format_warc_empty)
        archive_entry_set_mtime(ae, 5, 0);
        archive_entry_copy_pathname(ae, "..");
        archive_entry_set_mode(ae, S_IFDIR | 0755);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        /* Add "/" entry which must be ignored. */ 
@@ -67,7 +67,7 @@ DEFINE_TEST(test_write_format_warc_empty)
        archive_entry_set_mtime(ae, 5, 0);
        archive_entry_copy_pathname(ae, "/");
        archive_entry_set_mode(ae, S_IFDIR | 0755);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        /* Add "../" entry which must be ignored. */ 
@@ -77,7 +77,7 @@ DEFINE_TEST(test_write_format_warc_empty)
        archive_entry_set_mtime(ae, 5, 0);
        archive_entry_copy_pathname(ae, "../");
        archive_entry_set_mode(ae, S_IFDIR | 0755);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        /* Add "../../." entry which must be ignored. */ 
@@ -87,7 +87,7 @@ DEFINE_TEST(test_write_format_warc_empty)
        archive_entry_set_mtime(ae, 5, 0);
        archive_entry_copy_pathname(ae, "../../.");
        archive_entry_set_mode(ae, S_IFDIR | 0755);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        /* Add "..//.././" entry which must be ignored. */ 
@@ -97,10 +97,21 @@ DEFINE_TEST(test_write_format_warc_empty)
        archive_entry_set_mtime(ae, 5, 0);
        archive_entry_copy_pathname(ae, "..//.././");
        archive_entry_set_mode(ae, S_IFDIR | 0755);
-       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae));
        archive_entry_free(ae);
 
        /* Close out the archive without writing anything. */
        assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
        assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+       /* Test whether last archive is empty indeed. */
+       assert((a = archive_read_new()) != NULL);
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used));
+
+       /* Test EOF */
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }