ZSTD : Drive the end of decompression with both "inputLimit" and "outputLimit"
nephri opened this issue · 0 comments
Hi,
I have an input ByteBuffer
with some datas i want to decompress.
I know i can decompress 65536 bytes but i don't know how many bytes in input buffer will be needed for this (but i know my input buffer contains enough data to achieve it and can decompress exactly 64K bytes)
So, i call ZstdDecompressor.decompress( ByteBufffer input , ByteBuffer output )
With exactly 65536 bytes availables to output
This method call io.airlift.compress.MalformedInputException: Output buffer too small: offset=999
because it try to decompress more than 65536 bytes.
It's because after a frame, it reach 65536 output bytes but continue because input bytes are remaining
In ZstdFrameDecompressor
i would have a code like this:
150: while( input < inputLimit && output < outputLimit ) {
But also in ZstdDecompressor
(like line 101), we should update position on output buffer and also on input buffer
If the outputlimit
is not perfectly aligned with a frame, we should continue to have the MalformedInputException
Best regards,
Sébastien.