tests: reproduce invalid CAB LZX history reference

This commit is contained in:
Malachi Moody committed 2026-08-08 13:59:18 -05:00
1 parent 6b89e4f9d6
commit 88f49e2623
5 files changed
+61

No files matched your search

+3
View File
@@ -494,6 +494,7 @@ libarchive_test_SOURCES= \
libarchive/test/test_read_format_cab_filename.c \
libarchive/test/test_read_format_cab_lzx_16bit.c \
libarchive/test/test_read_format_cab_lzx_e8.c \
libarchive/test/test_read_format_cab_lzx_invalid_history.c \
libarchive/test/test_read_format_cab_lzx_oob.c \
libarchive/test/test_read_format_cab_mszip_oob.c \
libarchive/test/test_read_format_cab_multi.c \
@@ -928,6 +929,8 @@ libarchive_test_EXTRA_DIST=\
libarchive/test/test_read_format_cab_filename_cp932.cab.uu \
libarchive/test/test_read_format_cab_lzx_16bit.cab.uu \
libarchive/test/test_read_format_cab_lzx_e8.cab.uu \
libarchive/test/test_read_format_cab_lzx_invalid_history.cab.uu \
libarchive/test/test_read_format_cab_lzx_literal_control.cab.uu \
libarchive/test/test_read_format_cab_lzx_oob.cab.uu \
libarchive/test/test_read_format_cab_multi.p1.cab.uu \
libarchive/test/test_read_format_cab_multi.p2.cab.uu \
+1
View File
@@ -123,6 +123,7 @@ IF(ENABLE_TEST)
test_read_format_cab_filename.c
test_read_format_cab_lzx_16bit.c
test_read_format_cab_lzx_e8.c
test_read_format_cab_lzx_invalid_history.c
test_read_format_cab_lzx_oob.c
test_read_format_cab_mszip_oob.c
test_read_format_cab_multi.c
@@ -0,0 +1,45 @@
#include "test.h"
DEFINE_TEST(test_read_format_cab_lzx_invalid_history)
{
const char *invalid = "test_read_format_cab_lzx_invalid_history.cab";
const char *control = "test_read_format_cab_lzx_literal_control.cab";
struct archive *a;
struct archive_entry *ae;
char buff[2];
extract_reference_file(invalid);
extract_reference_file(control);
/* A match cannot refer to history that has not been produced yet. */
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_cab(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_filename(a, invalid, 10240));
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("x", archive_entry_pathname(ae));
assertEqualInt(2, archive_entry_size(ae));
assertEqualIntA(a, ARCHIVE_FATAL,
archive_read_data(a, buff, sizeof(buff)));
assertEqualInt(-1, archive_errno(a));
assertEqualString("LZX decompression failed (-25)",
archive_error_string(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
/* The corresponding literal-only stream remains valid. */
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_cab(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK,
archive_read_open_filename(a, control, 10240));
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("x", archive_entry_pathname(ae));
assertEqualInt(2, archive_entry_size(ae));
assertEqualIntA(a, sizeof(buff),
archive_read_data(a, buff, sizeof(buff)));
assertEqualMem("\0\0", buff, sizeof(buff));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
@@ -0,0 +1,6 @@
begin 644 test_read_format_cab_lzx_invalid_history.cab
M35-#1@````!V`````````"P``````````P$!``$`````````/@````$``P\"
M````````````````````>```````,``"```0(@`````````"``<B_____P"0
<````````$!'_/___@+P```````"(`/^#___`_```
`
end
@@ -0,0 +1,6 @@
begin 644 test_read_format_cab_lzx_literal_control.cab
M35-#1@````!V`````````"P``````````P$!``$`````````/@````$``P\"
M````````````````````>```````,``"```0(@`````````"``<B_____P"0
<````````$!'_/___@+P```````"(`/^#__^`_```
`
end