1
0
mirror of https://git.tukaani.org/xz.git synced 2026-10-31 11:24:56 +00:00
xz/tests/test_stream_buffer_decode.c

110 lines
2.2 KiB
C

// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file test_stream_buffer_decode.c
/// \brief Tests lzma_stream_buffer_decode()
//
// Author: Lasse Collin
//
///////////////////////////////////////////////////////////////////////////////
#include "tests.h"
// Uncompressed size of the test file
#define UNCOMP_SIZE 13
// Test file data and its compressed size
static uint8_t *xz_data;
static size_t xz_data_size;
static void
test_success(void)
{
#ifndef HAVE_DECODERS
assert_skip("Decoder support is disabled");
#else
uint64_t memlimit = 1 << 20;
size_t in_pos = 0;
uint8_t out[UNCOMP_SIZE];
size_t out_pos = 0;
size_t out_size = sizeof(out);
assert_lzma_ret(lzma_stream_buffer_decode(
&memlimit, LZMA_CONCATENATED, NULL,
xz_data, &in_pos, xz_data_size,
out, &out_pos, out_size), LZMA_OK);
assert_uint_eq(in_pos, xz_data_size);
assert_uint_eq(out_pos, UNCOMP_SIZE);
#endif
}
static void
test_data_error(void)
{
#ifndef HAVE_DECODERS
assert_skip("Decoder support is disabled");
#else
uint64_t memlimit = 1 << 20;
size_t in_pos = 0;
uint8_t out[UNCOMP_SIZE];
size_t out_pos = 0;
size_t out_size = sizeof(out);
// This fails in 5.8.3 and older.
assert_lzma_ret(lzma_stream_buffer_decode(
&memlimit, LZMA_CONCATENATED, NULL,
xz_data, &in_pos, xz_data_size - 1,
out, &out_pos, out_size), LZMA_DATA_ERROR);
assert_uint_eq(in_pos, 0);
assert_uint_eq(out_pos, 0);
#endif
}
static void
test_buf_error(void)
{
#ifndef HAVE_DECODERS
assert_skip("Decoder support is disabled");
#else
uint64_t memlimit = 1 << 20;
size_t in_pos = 0;
uint8_t out[UNCOMP_SIZE - 1];
size_t out_pos = 0;
size_t out_size = sizeof(out);
assert_lzma_ret(lzma_stream_buffer_decode(
&memlimit, LZMA_CONCATENATED, NULL,
xz_data, &in_pos, xz_data_size,
out, &out_pos, out_size), LZMA_BUF_ERROR);
assert_uint_eq(in_pos, 0);
assert_uint_eq(out_pos, 0);
#endif
}
extern int
main(int argc, char **argv)
{
tuktest_start(argc, argv);
xz_data = tuktest_file_from_srcdir("files/good-1-check-crc32.xz",
&xz_data_size);
tuktest_run(test_success);
tuktest_run(test_data_error);
tuktest_run(test_buf_error);
return tuktest_end();
}