lib/zlib: DFLTCC not writing header bits when avail_out == 0
This commit is based on: https://github.com/zlib-ng/zlib-ng/commit/ce409c6 Link: https://lkml.kernel.org/r/20230126131428.1222214-6-zaslonko@linux.ibm.com Signed-off-by: Mikhail Zaslonko <zaslonko@linux.ibm.com> Acked-by: Ilya Leoshkevich <iii@linux.ibm.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
0dbae46550
commit
cbf125408d
|
@ -170,13 +170,18 @@ again:
|
||||||
param->bcf = 0;
|
param->bcf = 0;
|
||||||
dfltcc_state->block_threshold =
|
dfltcc_state->block_threshold =
|
||||||
strm->total_in + dfltcc_state->block_size;
|
strm->total_in + dfltcc_state->block_size;
|
||||||
if (strm->avail_out == 0) {
|
|
||||||
*result = need_more;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* No space for compressed data. If we proceed, dfltcc_cmpr() will return
|
||||||
|
* DFLTCC_CC_OP1_TOO_SHORT without buffering header bits, but we will still
|
||||||
|
* set BCF=1, which is wrong. Avoid complications and return early.
|
||||||
|
*/
|
||||||
|
if (strm->avail_out == 0) {
|
||||||
|
*result = need_more;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* The caller gave us too much data. Pass only one block worth of
|
/* The caller gave us too much data. Pass only one block worth of
|
||||||
* uncompressed data to DFLTCC and mask the rest, so that on the next
|
* uncompressed data to DFLTCC and mask the rest, so that on the next
|
||||||
* iteration we start a new block.
|
* iteration we start a new block.
|
||||||
|
|
Loading…
Reference in New Issue