Renamed the test files from .lzma suffix to .xz suffix.
This commit is contained in:
parent
8e60c889a2
commit
4c321a41c4
|
@ -1,26 +1,26 @@
|
||||||
|
|
||||||
.lzma Test Files
|
.xz Test Files
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
0. Introduction
|
0. Introduction
|
||||||
|
|
||||||
This directory contains bunch of files to test handling of .lzma files
|
This directory contains bunch of files to test handling of .xz files
|
||||||
in .lzma decoder implementations. Many of the files have been created
|
in .xz decoder implementations. Many of the files have been created
|
||||||
by hand with a hex editor, thus there is no better "source code" than
|
by hand with a hex editor, thus there is no better "source code" than
|
||||||
the files themselves. All the test files (*.lzma) and this README have
|
the files themselves. All the test files (*.xz) and this README have
|
||||||
been put into the public domain.
|
been put into the public domain.
|
||||||
|
|
||||||
|
|
||||||
1. File Types
|
1. File Types
|
||||||
|
|
||||||
Good files (good-*.lzma) must decode successfully without requiring
|
Good files (good-*.xz) must decode successfully without requiring
|
||||||
a lot of CPU time or RAM.
|
a lot of CPU time or RAM.
|
||||||
|
|
||||||
Unsupported files (unsupported-*.lzma) are good files, but headers
|
Unsupported files (unsupported-*.xz) are good files, but headers
|
||||||
indicate features not supported by the current file format
|
indicate features not supported by the current file format
|
||||||
specification.
|
specification.
|
||||||
|
|
||||||
Bad files (bad-*.lzma) must cause the decoder to give an error. Like
|
Bad files (bad-*.xz) must cause the decoder to give an error. Like
|
||||||
with the good files, these files must not require a lot of CPU time
|
with the good files, these files must not require a lot of CPU time
|
||||||
or RAM before they get detected to be broken.
|
or RAM before they get detected to be broken.
|
||||||
|
|
||||||
|
@ -29,82 +29,82 @@
|
||||||
|
|
||||||
2.1. Good Files
|
2.1. Good Files
|
||||||
|
|
||||||
good-0-empty.lzma has one Stream with no Blocks.
|
good-0-empty.xz has one Stream with no Blocks.
|
||||||
|
|
||||||
good-0pad-empty.lzma has one Stream with no Blocks followed by
|
good-0pad-empty.xz has one Stream with no Blocks followed by
|
||||||
four-byte Stream Padding.
|
four-byte Stream Padding.
|
||||||
|
|
||||||
good-0cat-empty.lzma has two zero-Block Streams concatenated without
|
good-0cat-empty.xz has two zero-Block Streams concatenated without
|
||||||
Stream Padding.
|
Stream Padding.
|
||||||
|
|
||||||
good-0catpad-empty.lzma has two zero-Block Streams concatenated with
|
good-0catpad-empty.xz has two zero-Block Streams concatenated with
|
||||||
four-byte Stream Padding between the Streams.
|
four-byte Stream Padding between the Streams.
|
||||||
|
|
||||||
good-1-check-none.lzma has one Stream with one Block with two
|
good-1-check-none.xz has one Stream with one Block with two
|
||||||
uncompressed LZMA2 chunks and no integrity check.
|
uncompressed LZMA2 chunks and no integrity check.
|
||||||
|
|
||||||
good-1-check-crc32.lzma has one Stream with one Block with two
|
good-1-check-crc32.xz has one Stream with one Block with two
|
||||||
uncompressed LZMA2 chunks and CRC32 check.
|
uncompressed LZMA2 chunks and CRC32 check.
|
||||||
|
|
||||||
good-1-check-crc64.lzma is like good-1-check-crc32.lzma but with CRC64.
|
good-1-check-crc64.xz is like good-1-check-crc32.xz but with CRC64.
|
||||||
|
|
||||||
good-1-check-sha256.lzma is like good-1-check-crc32.lzma but with
|
good-1-check-sha256.xz is like good-1-check-crc32.xz but with
|
||||||
SHA256.
|
SHA256.
|
||||||
|
|
||||||
good-2-lzma2.lzma has one Stream with two Blocks with one uncompressed
|
good-2-lzma2.xz has one Stream with two Blocks with one uncompressed
|
||||||
LZMA2 chunk in each Block.
|
LZMA2 chunk in each Block.
|
||||||
|
|
||||||
good-1-block_header-1.lzma has both Compressed Size and Uncompressed
|
good-1-block_header-1.xz has both Compressed Size and Uncompressed
|
||||||
Size in the Block Header. This has also four extra bytes of Header
|
Size in the Block Header. This has also four extra bytes of Header
|
||||||
Padding.
|
Padding.
|
||||||
|
|
||||||
good-1-block_header-2.lzma has known Compressed Size.
|
good-1-block_header-2.xz has known Compressed Size.
|
||||||
|
|
||||||
good-1-block_header-3.lzma has known Uncompressed Size.
|
good-1-block_header-3.xz has known Uncompressed Size.
|
||||||
|
|
||||||
good-1-delta-lzma2.tiff.lzma is an image file that compresses
|
good-1-delta-lzma2.tiff.xz is an image file that compresses
|
||||||
better with Delta+LZMA2 than with plain LZMA2.
|
better with Delta+LZMA2 than with plain LZMA2.
|
||||||
|
|
||||||
good-1-x86-lzma2.lzma uses the x86 filter (BCJ) and LZMA2. The
|
good-1-x86-lzma2.xz uses the x86 filter (BCJ) and LZMA2. The
|
||||||
uncompressed file is compress_prepared_bcj_x86 found from the tests
|
uncompressed file is compress_prepared_bcj_x86 found from the tests
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
good-1-sparc-lzma2.lzma uses the SPARC filter and LZMA. The
|
good-1-sparc-lzma2.xz uses the SPARC filter and LZMA. The
|
||||||
uncompressed file is compress_prepared_bcj_sparc found from the tests
|
uncompressed file is compress_prepared_bcj_sparc found from the tests
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
good-1-lzma2-1.lzma has two LZMA2 chunks, of which the second sets
|
good-1-lzma2-1.xz has two LZMA2 chunks, of which the second sets
|
||||||
new properties.
|
new properties.
|
||||||
|
|
||||||
good-1-lzma2-2.lzma has two LZMA2 chunks, of which the second resets
|
good-1-lzma2-2.xz has two LZMA2 chunks, of which the second resets
|
||||||
the state without specifying new properties.
|
the state without specifying new properties.
|
||||||
|
|
||||||
good-1-lzma2-3.lzma has two LZMA2 chunks, of which the first is
|
good-1-lzma2-3.xz has two LZMA2 chunks, of which the first is
|
||||||
uncompressed and the second is LZMA. The first chunk resets dictionary
|
uncompressed and the second is LZMA. The first chunk resets dictionary
|
||||||
and the second sets new properties.
|
and the second sets new properties.
|
||||||
|
|
||||||
good-1-3delta-lzma2.lzma has three Delta filters and LZMA2.
|
good-1-3delta-lzma2.xz has three Delta filters and LZMA2.
|
||||||
|
|
||||||
|
|
||||||
2.2. Unsupported Files
|
2.2. Unsupported Files
|
||||||
|
|
||||||
unsupported-check.lzma uses Check ID 0x02 which isn't supported by
|
unsupported-check.xz uses Check ID 0x02 which isn't supported by
|
||||||
the current version of the file format. It is implementation-defined
|
the current version of the file format. It is implementation-defined
|
||||||
how this file handled (it may reject it, or decode it possibly with
|
how this file handled (it may reject it, or decode it possibly with
|
||||||
a warning).
|
a warning).
|
||||||
|
|
||||||
unsupported-block_header.lzma has a non-nul byte in Header Padding,
|
unsupported-block_header.xz has a non-nul byte in Header Padding,
|
||||||
which may indicate presence of a new unsupported field.
|
which may indicate presence of a new unsupported field.
|
||||||
|
|
||||||
unsupported-filter_flags-1.lzma has unsupported Filter ID 0x7F.
|
unsupported-filter_flags-1.xz has unsupported Filter ID 0x7F.
|
||||||
|
|
||||||
unsupported-filter_flags-2.lzma specifies only Delta filter in the
|
unsupported-filter_flags-2.xz specifies only Delta filter in the
|
||||||
List of Filter Flags, but Delta isn't allowed as the last filter in
|
List of Filter Flags, but Delta isn't allowed as the last filter in
|
||||||
the chain. It could be a little more correct to detect this file as
|
the chain. It could be a little more correct to detect this file as
|
||||||
corrupt instead of unsupported, but saying it is unsupported is
|
corrupt instead of unsupported, but saying it is unsupported is
|
||||||
simpler in case of liblzma.
|
simpler in case of liblzma.
|
||||||
|
|
||||||
unsupported-filter_flags-3.lzma specifies two LZMA2 filters in the
|
unsupported-filter_flags-3.xz specifies two LZMA2 filters in the
|
||||||
List of Filter Flags. LZMA2 is allowed only as the last filter in the
|
List of Filter Flags. LZMA2 is allowed only as the last filter in the
|
||||||
chain. It could be a little more correct to detect this file as
|
chain. It could be a little more correct to detect this file as
|
||||||
corrupt instead of unsupported, but saying it is unsupported is
|
corrupt instead of unsupported, but saying it is unsupported is
|
||||||
|
@ -113,106 +113,106 @@
|
||||||
|
|
||||||
2.3. Bad Files
|
2.3. Bad Files
|
||||||
|
|
||||||
bad-0pad-empty.lzma has one Stream with no Blocks followed by
|
bad-0pad-empty.xz has one Stream with no Blocks followed by
|
||||||
five-byte Stream Padding. Stream Padding must be a multiple of four
|
five-byte Stream Padding. Stream Padding must be a multiple of four
|
||||||
bytes, thus this file is corrupt.
|
bytes, thus this file is corrupt.
|
||||||
|
|
||||||
bad-0catpad-empty.lzma has two zero-Block Streams concatenated with
|
bad-0catpad-empty.xz has two zero-Block Streams concatenated with
|
||||||
five-byte Stream Padding between the Streams.
|
five-byte Stream Padding between the Streams.
|
||||||
|
|
||||||
bad-0cat-alone.lzma is good-0-empty.lzma concatenated with an empty
|
bad-0cat-alone.xz is good-0-empty.xz concatenated with an empty
|
||||||
LZMA_Alone file.
|
LZMA_Alone file.
|
||||||
|
|
||||||
bad-0cat-header_magic.lzma is good-0cat-empty.lzma but with one byte
|
bad-0cat-header_magic.xz is good-0cat-empty.xz but with one byte
|
||||||
wrong in the Header Magic Bytes field of the second Stream. liblzma
|
wrong in the Header Magic Bytes field of the second Stream. liblzma
|
||||||
gives LZMA_DATA_ERROR for this. (LZMA_FORMAT_ERROR is used only if
|
gives LZMA_DATA_ERROR for this. (LZMA_FORMAT_ERROR is used only if
|
||||||
the first Stream of a file has invalid Header Magic Bytes.)
|
the first Stream of a file has invalid Header Magic Bytes.)
|
||||||
|
|
||||||
bad-0-header_magic.lzma is good-0-empty.lzma but with one byte wrong
|
bad-0-header_magic.xz is good-0-empty.xz but with one byte wrong
|
||||||
in the Header Magic Bytes field. liblzma gives LZMA_FORMAT_ERROR for
|
in the Header Magic Bytes field. liblzma gives LZMA_FORMAT_ERROR for
|
||||||
this.
|
this.
|
||||||
|
|
||||||
bad-0-footer_magic.lzma is good-0-empty.lzma but with one byte wrong
|
bad-0-footer_magic.xz is good-0-empty.xz but with one byte wrong
|
||||||
in the Footer Magic Bytes field. liblzma gives LZMA_DATA_ERROR for
|
in the Footer Magic Bytes field. liblzma gives LZMA_DATA_ERROR for
|
||||||
this.
|
this.
|
||||||
|
|
||||||
bad-0-empty-truncated.lzma is good-0-empty.lzma without the last byte
|
bad-0-empty-truncated.xz is good-0-empty.xz without the last byte
|
||||||
of the file.
|
of the file.
|
||||||
|
|
||||||
bad-0-nonempty_index.lzma has no Blocks but Index claims that there is
|
bad-0-nonempty_index.xz has no Blocks but Index claims that there is
|
||||||
one Block.
|
one Block.
|
||||||
|
|
||||||
bad-0-backward_size.lzma has wrong Backward Size in Stream Footer.
|
bad-0-backward_size.xz has wrong Backward Size in Stream Footer.
|
||||||
|
|
||||||
bad-1-stream_flags-1.lzma has different Stream Flags in Stream Header
|
bad-1-stream_flags-1.xz has different Stream Flags in Stream Header
|
||||||
and Stream Footer.
|
and Stream Footer.
|
||||||
|
|
||||||
bad-1-stream_flags-2.lzma has wrong CRC32 in Stream Header.
|
bad-1-stream_flags-2.xz has wrong CRC32 in Stream Header.
|
||||||
|
|
||||||
bad-1-stream_flags-3.lzma has wrong CRC32 in Stream Footer.
|
bad-1-stream_flags-3.xz has wrong CRC32 in Stream Footer.
|
||||||
|
|
||||||
bad-1-vli-1.lzma has two-byte variable-length integer in the
|
bad-1-vli-1.xz has two-byte variable-length integer in the
|
||||||
Uncompressed Size field in Block Header while one-byte would be enough
|
Uncompressed Size field in Block Header while one-byte would be enough
|
||||||
for that value. It's important that the file gets rejected due to too
|
for that value. It's important that the file gets rejected due to too
|
||||||
big integer encoding instead of due to Uncompressed Size not matching
|
big integer encoding instead of due to Uncompressed Size not matching
|
||||||
the value stored in the Block Header. That is, the decoder must not
|
the value stored in the Block Header. That is, the decoder must not
|
||||||
try to decode the Compressed Data field.
|
try to decode the Compressed Data field.
|
||||||
|
|
||||||
bad-1-vli-2.lzma has ten-byte variable-length integer as Uncompressed
|
bad-1-vli-2.xz has ten-byte variable-length integer as Uncompressed
|
||||||
Size in Block Header. It's important that the file gets rejected due
|
Size in Block Header. It's important that the file gets rejected due
|
||||||
to too big integer encoding instead of due to Uncompressed Size not
|
to too big integer encoding instead of due to Uncompressed Size not
|
||||||
matching the value stored in the Block Header. That is, the decoder
|
matching the value stored in the Block Header. That is, the decoder
|
||||||
must not try to decode the Compressed Data field.
|
must not try to decode the Compressed Data field.
|
||||||
|
|
||||||
bad-1-block_header-1.lzma has Block Header that ends in the middle of
|
bad-1-block_header-1.xz has Block Header that ends in the middle of
|
||||||
the Filter Flags field.
|
the Filter Flags field.
|
||||||
|
|
||||||
bad-1-block_header-2.lzma has Block Header that has Compressed Size and
|
bad-1-block_header-2.xz has Block Header that has Compressed Size and
|
||||||
Uncompressed Size but no List of Filter Flags field.
|
Uncompressed Size but no List of Filter Flags field.
|
||||||
|
|
||||||
bad-1-block_header-3.lzma has wrong CRC32 in Block Header.
|
bad-1-block_header-3.xz has wrong CRC32 in Block Header.
|
||||||
|
|
||||||
bad-1-block_header-4.lzma has too big Compressed Size (2^63 bytes while
|
bad-1-block_header-4.xz has too big Compressed Size (2^63 bytes while
|
||||||
maximum is 2^63 - 4 bytes) in Block Header. It's important that the
|
maximum is 2^63 - 4 bytes) in Block Header. It's important that the
|
||||||
file gets rejected due to invalid Compressed Size value; the decoder
|
file gets rejected due to invalid Compressed Size value; the decoder
|
||||||
must not try decoding the Compressed Data field.
|
must not try decoding the Compressed Data field.
|
||||||
|
|
||||||
bad-2-index-1.lzma has wrong Total Sizes in Index.
|
bad-2-index-1.xz has wrong Total Sizes in Index.
|
||||||
|
|
||||||
bad-2-index-2.lzma has wrong Uncompressed Sizes in Index.
|
bad-2-index-2.xz has wrong Uncompressed Sizes in Index.
|
||||||
|
|
||||||
bad-2-index-3.lzma has non-nul byte in Index Padding.
|
bad-2-index-3.xz has non-nul byte in Index Padding.
|
||||||
|
|
||||||
bad-2-index-4.lzma wrong CRC32 in Index.
|
bad-2-index-4.xz wrong CRC32 in Index.
|
||||||
|
|
||||||
bad-2-compressed_data_padding.lzma has non-nul byte in the padding of
|
bad-2-compressed_data_padding.xz has non-nul byte in the padding of
|
||||||
the Compressed Data field of the first Block.
|
the Compressed Data field of the first Block.
|
||||||
|
|
||||||
bad-1-check-crc32.lzma has wrong Check (CRC32).
|
bad-1-check-crc32.xz has wrong Check (CRC32).
|
||||||
|
|
||||||
bad-1-check-crc64.lzma has wrong Check (CRC64).
|
bad-1-check-crc64.xz has wrong Check (CRC64).
|
||||||
|
|
||||||
bad-1-check-sha256.lzma has wrong Check (SHA-256).
|
bad-1-check-sha256.xz has wrong Check (SHA-256).
|
||||||
|
|
||||||
bad-1-lzma2-1.lzma has LZMA2 stream whose first chunk (uncompressed)
|
bad-1-lzma2-1.xz has LZMA2 stream whose first chunk (uncompressed)
|
||||||
doesn't reset the dictionary.
|
doesn't reset the dictionary.
|
||||||
|
|
||||||
bad-1-lzma2-2.lzma has two LZMA2 chunks, of which the second chunk
|
bad-1-lzma2-2.xz has two LZMA2 chunks, of which the second chunk
|
||||||
indicates dictionary reset, but the LZMA compressed data tries to
|
indicates dictionary reset, but the LZMA compressed data tries to
|
||||||
repeat data from the previous chunk.
|
repeat data from the previous chunk.
|
||||||
|
|
||||||
bad-1-lzma2-3.lzma sets new invalid properties (lc=8, lp=0, pb=0) in
|
bad-1-lzma2-3.xz sets new invalid properties (lc=8, lp=0, pb=0) in
|
||||||
the middle of Block.
|
the middle of Block.
|
||||||
|
|
||||||
bad-1-lzma2-4.lzma has two LZMA2 chunks, of which the first is
|
bad-1-lzma2-4.xz has two LZMA2 chunks, of which the first is
|
||||||
uncompressed and the second is LZMA. The first chunk resets dictionary
|
uncompressed and the second is LZMA. The first chunk resets dictionary
|
||||||
as it should, but the second chunk tries to reset state without
|
as it should, but the second chunk tries to reset state without
|
||||||
specifying properties for LZMA.
|
specifying properties for LZMA.
|
||||||
|
|
||||||
bad-1-lzma2-5.lzma is like bad-1-lzma2-4.lzma but doesn't try to reset
|
bad-1-lzma2-5.xz is like bad-1-lzma2-4.xz but doesn't try to reset
|
||||||
anything in the header of the second chunk.
|
anything in the header of the second chunk.
|
||||||
|
|
||||||
bad-1-lzma2-6.lzma has reserved LZMA2 control byte value (0x03).
|
bad-1-lzma2-6.xz has reserved LZMA2 control byte value (0x03).
|
||||||
|
|
||||||
bad-1-lzma2-7.lzma has EOPM at LZMA level.
|
bad-1-lzma2-7.xz has EOPM at LZMA level.
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
for I in "$srcdir"/files/good-*.lzma
|
for I in "$srcdir"/files/good-*.xz
|
||||||
do
|
do
|
||||||
if ../src/lzmadec/lzmadec "$I" > /dev/null 2> /dev/null ; then
|
if ../src/lzmadec/lzmadec "$I" > /dev/null 2> /dev/null ; then
|
||||||
:
|
:
|
||||||
|
@ -27,7 +27,7 @@ do
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for I in "$srcdir"/files/bad-*.lzma
|
for I in "$srcdir"/files/bad-*.xz
|
||||||
do
|
do
|
||||||
if ../src/lzmadec/lzmadec "$I" > /dev/null 2> /dev/null ; then
|
if ../src/lzmadec/lzmadec "$I" > /dev/null 2> /dev/null ; then
|
||||||
echo "Bad file succeeded: $I"
|
echo "Bad file succeeded: $I"
|
||||||
|
@ -36,7 +36,5 @@ do
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# TODO: Test malicious files too, but with care.
|
|
||||||
|
|
||||||
(exit 0)
|
(exit 0)
|
||||||
exit 0
|
exit 0
|
||||||
|
|
Loading…
Reference in New Issue