From e3cc7fc45b395416462200e61af6877966488ea0 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Sun, 13 Dec 2015 14:24:55 -0500 Subject: journal: add "xfail" test for partial lz4 decompression Add a test that LZ4_decompress_safe_partial does (not) work as expected, so that if it starts to work at some point, we'll catch this and adjust our code. --- src/journal/test-compress.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/journal/test-compress.c') diff --git a/src/journal/test-compress.c b/src/journal/test-compress.c index 62b5a508be..026fb173bc 100644 --- a/src/journal/test-compress.c +++ b/src/journal/test-compress.c @@ -17,6 +17,10 @@ along with systemd; If not, see . ***/ +#ifdef HAVE_LZ4 +#include +#endif + #include "alloc-util.h" #include "compress.h" #include "fd-util.h" @@ -197,6 +201,42 @@ static void test_compress_stream(int compression, assert_se(unlink(pattern2) == 0); } +#ifdef HAVE_LZ4 +static void test_lz4_decompress_partial(void) { + char buf[20000]; + size_t buf_size = sizeof(buf), compressed; + int r; + + char huge[4096*1024]; + memset(huge, 'x', sizeof(huge)); + memcpy(huge, "HUGE=", 5); + + r = LZ4_compress_limitedOutput(huge, buf, sizeof(huge), buf_size); + assert_se(r >= 0); + compressed = r; + log_info("Compressed %zu → %zu", sizeof(huge), compressed); + + r = LZ4_decompress_safe(buf, huge, r, sizeof(huge)); + assert_se(r >= 0); + log_info("Decompressed → %i", r); + + r = LZ4_decompress_safe_partial(buf, huge, + compressed, + 12, (int) sizeof(huge)); + assert_se(r >= 0); + log_info("Decompressed partial %i/%zu → %i", 12, sizeof(huge), r); + + /* We expect this to fail, because that's how current lz4 works. If this + * call succeeds, then lz4 has been fixed, and we need to change our code. + */ + r = LZ4_decompress_safe_partial(buf, huge, + compressed, + 12, (int) sizeof(huge) - 1); + assert_se(r < 0); + log_info("Decompressed partial %i/%zu → %i", 12, sizeof(huge), r); +} +#endif + int main(int argc, char *argv[]) { const char text[] = "text\0foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF" @@ -239,6 +279,8 @@ int main(int argc, char *argv[]) { test_compress_stream(OBJECT_COMPRESSED_LZ4, "lz4cat", compress_stream_lz4, decompress_stream_lz4, argv[0]); + + test_lz4_decompress_partial(); #else log_info("/* LZ4 test skipped */"); #endif -- cgit v1.2.3-54-g00ecf