summaryrefslogtreecommitdiff
path: root/Build/source/extra/xz/tests/test_bcj_exact_size.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/extra/xz/tests/test_bcj_exact_size.c')
-rw-r--r--Build/source/extra/xz/tests/test_bcj_exact_size.c112
1 files changed, 0 insertions, 112 deletions
diff --git a/Build/source/extra/xz/tests/test_bcj_exact_size.c b/Build/source/extra/xz/tests/test_bcj_exact_size.c
deleted file mode 100644
index cbd93405cd1..00000000000
--- a/Build/source/extra/xz/tests/test_bcj_exact_size.c
+++ /dev/null
@@ -1,112 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-//
-/// \file test_bcj_exact_size.c
-/// \brief Tests BCJ decoding when the output size is known
-///
-/// These tests fail with XZ Utils 5.0.3 and earlier.
-//
-// Author: Lasse Collin
-//
-// This file has been put into the public domain.
-// You can do whatever you want with this file.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "tests.h"
-
-
-/// Something to be compressed
-static const uint8_t in[16] = "0123456789ABCDEF";
-
-/// in[] after compression
-static uint8_t compressed[1024];
-static size_t compressed_size = 0;
-
-/// Output buffer for decompressing compressed[]
-static uint8_t out[sizeof(in)];
-
-
-static void
-compress(void)
-{
- // Compress with PowerPC BCJ and LZMA2. PowerPC BCJ is used because
- // it has fixed 4-byte alignment which makes triggering the potential
- // bug easy.
- lzma_options_lzma opt_lzma2;
- succeed(lzma_lzma_preset(&opt_lzma2, 0));
-
- lzma_filter filters[3] = {
- { .id = LZMA_FILTER_POWERPC, .options = NULL },
- { .id = LZMA_FILTER_LZMA2, .options = &opt_lzma2 },
- { .id = LZMA_VLI_UNKNOWN, .options = NULL },
- };
-
- expect(lzma_stream_buffer_encode(filters, LZMA_CHECK_CRC32, NULL,
- in, sizeof(in),
- compressed, &compressed_size, sizeof(compressed))
- == LZMA_OK);
-}
-
-
-static void
-decompress(void)
-{
- lzma_stream strm = LZMA_STREAM_INIT;
- expect(lzma_stream_decoder(&strm, 10 << 20, 0) == LZMA_OK);
-
- strm.next_in = compressed;
- strm.next_out = out;
-
- while (true) {
- if (strm.total_in < compressed_size)
- strm.avail_in = 1;
-
- const lzma_ret ret = lzma_code(&strm, LZMA_RUN);
- if (ret == LZMA_STREAM_END) {
- expect(strm.total_in == compressed_size);
- expect(strm.total_out == sizeof(in));
- return;
- }
-
- expect(ret == LZMA_OK);
-
- if (strm.total_out < sizeof(in))
- strm.avail_out = 1;
- }
-}
-
-
-static void
-decompress_empty(void)
-{
- // An empty file with one Block using PowerPC BCJ and LZMA2.
- static const uint8_t empty_bcj_lzma2[] = {
- 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00, 0x00, 0x01,
- 0x69, 0x22, 0xDE, 0x36, 0x02, 0x01, 0x05, 0x00,
- 0x21, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0xF1, 0xC8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x11, 0x00, 0x3B, 0x96, 0x5F, 0x73,
- 0x90, 0x42, 0x99, 0x0D, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x59, 0x5A
- };
-
- // Decompress without giving any output space.
- uint64_t memlimit = 1 << 20;
- size_t in_pos = 0;
- size_t out_pos = 0;
- expect(lzma_stream_buffer_decode(&memlimit, 0, NULL,
- empty_bcj_lzma2, &in_pos, sizeof(empty_bcj_lzma2),
- out, &out_pos, 0) == LZMA_OK);
- expect(in_pos == sizeof(empty_bcj_lzma2));
- expect(out_pos == 0);
-}
-
-
-extern int
-main(void)
-{
- compress();
- decompress();
- decompress_empty();
- return 0;
-}