inikep / lizard

Lizard (formerly LZ5) is an efficient compressor with very fast decompression. It achieves compression ratio that is comparable to zip/zlib and zstd/brotli (at low and medium compression levels) at decompression speed of 1000 MB/s and faster.
Other
644 stars 40 forks source link

Valgrind complains about "Conditional jump or move depends on uninitialised value(s)" #14

Closed FrancescAlted closed 6 years ago

FrancescAlted commented 6 years ago

Hi,

I am a happy user of the Lizard codec (really shine in some of my use cases inside Blosc). However, lately I am getting some complains from valgrind (they do not happen at all with the other codecs inside Blosc, like LZ4, Zlib or Zstd). The final result is fine; do you think this is something to be worried about? Using Lizard v1.0 here on a Linux box (Ubuntu 16.04).

Thanks for your fine work!

$ valgrind tests/test_btune 
==30189== Memcheck, a memory error detector
==30189== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==30189== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==30189== Command: tests/test_btune
==30189== 
==30189== Thread 5:
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E926B8: Lizard_compress_fastBig (lizard_parser_fastbig.h:85)
==30189==    by 0x4E926B8: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E926B8: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E92AC6: Lizard_compress_fastBig (lizard_parser_fastbig.h:138)
==30189==    by 0x4E92AC6: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E92AC6: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Thread 4:
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E92AD1: Lizard_compress_fastBig (lizard_parser_fastbig.h:138)
==30189==    by 0x4E92AD1: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E92AD1: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E926BF: Lizard_compress_fastBig (lizard_parser_fastbig.h:85)
==30189==    by 0x4E926BF: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E926BF: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Thread 3:
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E92AE5: Lizard_compress_fastBig (lizard_parser_fastbig.h:138)
==30189==    by 0x4E92AE5: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E92AE5: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E92AF0: Lizard_compress_fastBig (lizard_parser_fastbig.h:140)
==30189==    by 0x4E92AF0: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E92AF0: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E92B02: Lizard_compress_fastBig (lizard_parser_fastbig.h:142)
==30189==    by 0x4E92B02: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E92B02: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Use of uninitialised value of size 8
==30189==    at 0x4E92B08: Lizard_compress_fastBig (lizard_parser_fastbig.h:143)
==30189==    by 0x4E92B08: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E92B08: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E926D1: Lizard_compress_fastBig (lizard_parser_fastbig.h:85)
==30189==    by 0x4E926D1: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E926D1: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E926D8: Lizard_compress_fastBig (lizard_parser_fastbig.h:87)
==30189==    by 0x4E926D8: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E926D8: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Conditional jump or move depends on uninitialised value(s)
==30189==    at 0x4E926EB: Lizard_compress_fastBig (lizard_parser_fastbig.h:89)
==30189==    by 0x4E926EB: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E926EB: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
==30189== Use of uninitialised value of size 8
==30189==    at 0x4E926ED: Lizard_compress_fastBig (lizard_parser_fastbig.h:90)
==30189==    by 0x4E926ED: Lizard_compress_generic (lizard_compress.c:515)
==30189==    by 0x4E926ED: Lizard_compress_extState (lizard_compress.c:592)
==30189==    by 0x4E93367: Lizard_compress (lizard_compress.c:602)
==30189==    by 0x4E5025D: lizard_wrap_compress (blosc.c:398)
==30189==    by 0x4E5025D: blosc_c (blosc.c:733)
==30189==    by 0x4E50F0A: t_blosc (blosc.c:2155)
==30189==    by 0x54CA6B9: start_thread (pthread_create.c:333)
==30189== 
inikep commented 6 years ago

Hi,

By default Lizard doesn't use memset() on hash tables as values are always bound checked. It gives some speed improvement. To pass validation checks you need to compile lizard_compress.c with one of: 1) #define LIZARD_RESET_MEM 2) gcc -DLIZARD_RESET_MEM lizard_compress.c

FrancescAlted commented 6 years ago

Thanks!