diff --git a/tests/Makefile.am b/tests/Makefile.am index 15dc16a8..dd1d4056 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -39,6 +39,7 @@ check_PROGRAMS = \ create_compress_files \ test_check \ test_hardware \ + test_stream_buffer_decode \ test_stream_flags \ test_filter_flags \ test_filter_str \ @@ -53,6 +54,7 @@ check_PROGRAMS = \ TESTS = \ test_check \ test_hardware \ + test_stream_buffer_decode \ test_stream_flags \ test_filter_flags \ test_filter_str \ diff --git a/tests/test_stream_buffer_decode.c b/tests/test_stream_buffer_decode.c new file mode 100644 index 00000000..110bfa02 --- /dev/null +++ b/tests/test_stream_buffer_decode.c @@ -0,0 +1,109 @@ +// 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(); +} diff --git a/tests/tests.cmake b/tests/tests.cmake index 9302a5e4..eff63d86 100644 --- a/tests/tests.cmake +++ b/tests/tests.cmake @@ -61,6 +61,7 @@ if(BUILD_TESTING) test_index_hash test_lzip_decoder test_memlimit + test_stream_buffer_decode test_stream_flags test_vli )