Skip to content

Commit 1960646

Browse files
committed
7zip: add malformed SubStreamsInfo test
Add a 7z regression test for malformed SubStreamsInfo metadata that declares more than one unpack stream without the kSize data needed to describe those streams. Store the archive as a .7z.uu file, matching the existing malformed 7z tests.
1 parent 81385b8 commit 1960646

3 files changed

Lines changed: 25 additions & 0 deletions

File tree

Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,7 @@ libarchive_test_EXTRA_DIST=\
881881
libarchive/test/test_read_format_7zip_malformed.7z.uu \
882882
libarchive/test/test_read_format_7zip_malformed2.7z.uu \
883883
libarchive/test/test_read_format_7zip_malformed3.7z.uu \
884+
libarchive/test/test_read_format_7zip_malformed4.7z.uu \
884885
libarchive/test/test_read_format_7zip_packinfo_digests.7z.uu \
885886
libarchive/test/test_read_format_7zip_ppmd.7z.uu \
886887
libarchive/test/test_read_format_7zip_sfx_elf.elf.uu \

libarchive/test/test_read_format_7zip_malformed.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,28 @@ test_malformed3(void)
7575
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
7676
}
7777

78+
79+
static void
80+
test_malformed4(void)
81+
{
82+
const char *refname = "test_read_format_7zip_malformed4.7z";
83+
struct archive *a;
84+
struct archive_entry *ae;
85+
86+
extract_reference_file(refname);
87+
88+
assert((a = archive_read_new()) != NULL);
89+
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
90+
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
91+
assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 10240));
92+
assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae));
93+
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
94+
}
95+
7896
DEFINE_TEST(test_read_format_7zip_malformed)
7997
{
8098
test_malformed1();
8199
test_malformed2();
82100
test_malformed3();
101+
test_malformed4();
83102
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
begin 644 test_read_format_7zip_malformed4.7z
2+
M-WJ\KR<<``0N^]EU```````````9`````````&WKXL4!!`8``0D```<+`0`!
3+
,`0`,```(#0(`````
4+
`
5+
end

0 commit comments

Comments
 (0)