summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2022-12-15 09:07:13 -0800
committerMark Adler <madler@alumni.caltech.edu>2022-12-15 09:15:31 -0800
commite554695638228b846d49657f31eeff0ca4680e8a (patch)
tree8f01c7ef4e8c6f599922a38700165c8537fdcdbf
parent76820e4107f534231f1302351a7ea479e86d1dd4 (diff)
downloadzlib-e554695638228b846d49657f31eeff0ca4680e8a.tar.gz
Fix bug in deflateBound() for level 0 and memLevel 9.
memLevel 9 would cause deflateBound() to assume the use of fixed blocks, even if the compression level was 0, which forces stored blocks. That could result in a bound less than the size of the compressed data. Now level 0 always uses the stored blocks bound.
-rw-r--r--deflate.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/deflate.c b/deflate.c
index cd538b8..4a512e1 100644
--- a/deflate.c
+++ b/deflate.c
@@ -752,7 +752,8 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
/* if not default parameters, return one of the conservative bounds */
if (s->w_bits != 15 || s->hash_bits != 8 + 7)
- return (s->w_bits <= s->hash_bits ? fixedlen : storelen) + wraplen;
+ return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) +
+ wraplen;
/* default settings: return tight bound for that case -- ~0.03% overhead
plus a small constant */