47 lines
1.5 KiB
Diff
47 lines
1.5 KiB
Diff
From 7fabcb53576aca08b8e25174eb7b0df7c585e4e0 Mon Sep 17 00:00:00 2001
|
|
From: Mark Adler <fork@madler.net>
|
|
Date: Sat, 1 Oct 2022 19:55:29 -0700
|
|
Subject: [PATCH] Fix bug in block type selection when Z_FIXED used.
|
|
|
|
A fixed block could be chosen when a stored block was smaller. Now
|
|
the smaller of the two is always chosen.
|
|
|
|
Reference:https://github.com/madler/zlib/commit/7fabcb53576aca08b8e25174eb7b0df7c585e4e0
|
|
Conflict:NA
|
|
---
|
|
trees.c | 11 +++++------
|
|
1 file changed, 5 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/trees.c b/trees.c
|
|
index 8cd8255..618d30c 100644
|
|
--- a/trees.c
|
|
+++ b/trees.c
|
|
@@ -950,7 +950,10 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
|
|
opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
|
|
s->sym_next / 3));
|
|
|
|
- if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
|
|
+#ifndef FORCE_STATIC
|
|
+ if (static_lenb <= opt_lenb || s->strategy == Z_FIXED)
|
|
+#endif
|
|
+ opt_lenb = static_lenb;
|
|
|
|
} else {
|
|
Assert(buf != (char*)0, "lost buf");
|
|
@@ -971,11 +974,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
|
|
*/
|
|
_tr_stored_block(s, buf, stored_len, last);
|
|
|
|
-#ifdef FORCE_STATIC
|
|
- } else if (static_lenb >= 0) { /* force static trees */
|
|
-#else
|
|
- } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
|
|
-#endif
|
|
+ } else if (static_lenb == opt_lenb) {
|
|
send_bits(s, (STATIC_TREES<<1)+last, 3);
|
|
compress_block(s, (const ct_data *)static_ltree,
|
|
(const ct_data *)static_dtree);
|
|
--
|
|
2.33.0
|
|
|