]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
xar: Add test for redundant decrement in xar_finish_entry
authori1011 <petercheng2000@gmail.com>
Sat, 30 May 2026 17:22:32 +0000 (01:22 +0800)
committeri1011 <petercheng2000@gmail.com>
Sat, 30 May 2026 17:22:32 +0000 (01:22 +0800)
libarchive/test/test_write_format_xar.c

index 26b20118566f4e732ba7bdb85ee778dbc8e35c0d..495400a34f921a6a6964df90e7e5bc9fcb1fd08c 100644 (file)
@@ -351,3 +351,32 @@ DEFINE_TEST(test_write_format_xar)
        test_xar("compression=xz,compression-level=1");
        test_xar("compression=xz,compression-level=9");
 }
+
+DEFINE_TEST(test_write_format_xar_entry_trunc)
+{
+       struct archive *a;
+       struct archive_entry *ae;
+       unsigned char buff[1024];
+       size_t used = 0;
+
+       assert((a = archive_write_new()) != NULL);
+       if (archive_write_set_format_xar(a) != ARCHIVE_OK) {
+               skipping("xar is not supported on this platform");
+               assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+               return;
+       }
+       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, "foo");
+       archive_entry_set_mode(ae, S_IFREG | 0644);
+       archive_entry_set_size(ae, 1028);
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       archive_entry_free(ae);
+       assertEqualIntA(a, 3, archive_write_data(a, "foo", 3));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+}