kali834x opened a new pull request, #785:
URL: https://github.com/apache/commons-compress/pull/785

   Deflate64's HuffmanDecoder decodes a literal/length symbol from the bit 
stream and uses it to index RUN_LENGTH_TABLE, and a distance symbol to index 
DISTANCE_TABLE, without checking either against the table bounds. The fixed 
literal/length tree assigns codes to symbols 286 and 287, which RFC 1951 
reserves and which have no RUN_LENGTH_TABLE entry, so a stream that emits one 
of those codes runs symbol - 257 past the end of the 29-element table. An 
incomplete dynamic tree is also decodable to -1, which on the length side is 
silently written out as a 0xFF literal and on the distance side indexes 
DISTANCE_TABLE[-1]. I hit the length case first with a hand-built fixed-Huffman 
block holding the code for 286, which threw ArrayIndexOutOfBoundsException out 
of decode rather than a CompressorException. The fix checks each decoded symbol 
against its table before the lookup and rejects the out-of-range ones, which 
matches how the .Z and bzip2 decoders here already reject invalid codes. Added a
  HuffmanDecoderTest case for the 286 stream.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to