tests: reproduce invalid CAB LZX history reference
This commit is contained in:
1 parent
6b89e4f9d6
commit
88f49e2623
5 files changed
+61
No files matched your search
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user