From: Tobias Stoeckmann Date: Tue, 28 Apr 2026 16:29:06 +0000 (+0200) Subject: sparse: Add archive_entry_sparse_reset test X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e23e868c3ac93768c7dd362dbc06302a759165c5;p=thirdparty%2Flibarchive.git sparse: Add archive_entry_sparse_reset test Check that archive_entry_sparse_reset resets all internal variables. Test case created and issue reported by Linke Li. Signed-off-by: Tobias Stoeckmann --- diff --git a/libarchive/test/test_sparse_basic.c b/libarchive/test/test_sparse_basic.c index 93710cb64..d4405ddae 100644 --- a/libarchive/test/test_sparse_basic.c +++ b/libarchive/test/test_sparse_basic.c @@ -695,3 +695,29 @@ DEFINE_TEST(test_fully_sparse_files) assertEqualInt(ARCHIVE_OK, archive_read_free(a)); free(cwd); } + +DEFINE_TEST(test_sparse_iterator) +{ + struct archive_entry *entry; + int64_t offset, length; + int count; + + entry = archive_entry_new(); + archive_entry_set_pathname(entry, "testfile"); + archive_entry_set_mode(entry, 0100644); + archive_entry_set_size(entry, 1024); + + /* Add one sparse block covering the entire file */ + archive_entry_sparse_add_entry(entry, 0, 1024); + + /* Should remove the only block covering the entire file */ + archive_entry_sparse_reset(entry); + + count = 0; + while (archive_entry_sparse_next(entry, &offset, &length) == ARCHIVE_OK) + count++; + assertEqualInt(0, count); + assertEqualInt(0, archive_entry_sparse_count(entry)); + + archive_entry_free(entry); +}