• Joe Tsai's avatar
    compress/bzip2: prevent zero-length Huffman codes · 8b360d5f
    Joe Tsai authored
    Unlike RFC 1951 (DEFLATE), bzip2 does not use zero-length Huffman codes
    to indicate that the symbol is missing. Instead, bzip2 uses a sparse
    bitmap to indicate which symbols are present. Thus, it is undefined what
    happens when a length of zero is used. Thus, fix the parsing logic so that
    the length cannot ever go below 1-bit similar to how the C logic does things.
    
    To confirm that the C bzip2 utility chokes on this data:
    	$ echo "425a6836314159265359b1f7404b000000400040002000217d184682ee48
    	a70a12163ee80960" | xxd -r -p | bzip2 -d
    
    	bzip2: Data integrity error when decompressing
    
    For reference see:
    	bzip2-1.0.6/decompress.c:320
    
    Change-Id: Ic1568f8e7f80cdea51d887b4d712cc239c2fe85e
    Reviewed-on: https://go-review.googlesource.com/20119
    Run-TryBot: Joe Tsai <joetsai@digital-static.net>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    8b360d5f
bzip2_test.go 29.9 KB