summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Stylinski <kungfujesus06@gmail.com>2022-02-21 16:46:18 -0500
committerHans Kristian Rosbach <hk-github@circlestorm.org>2022-02-23 14:47:49 +0100
commit321028cde93dac9f47b9b92ad186c4cbffb77cf2 (patch)
treeb8167d0ad0ff7ccb87fc2b22807aea26c96ca563
parent319755304904e9f65644d0e2f5504c123f68794e (diff)
downloadProject-Tick-321028cde93dac9f47b9b92ad186c4cbffb77cf2.tar.gz
Project-Tick-321028cde93dac9f47b9b92ad186c4cbffb77cf2.zip
Prevent stale stub functions from being called in deflate_slow
Just in case this is the very first call to longest match, we should instead assign the function pointer instead of the function itself. This way, by the time it leaves the stub, the function pointer gets reassigned. This was found incidentally while debugging something else.
-rw-r--r--deflate_slow.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/deflate_slow.c b/deflate_slow.c
index b8beec9ccd..20fa0f39ac 100644
--- a/deflate_slow.c
+++ b/deflate_slow.c
@@ -19,12 +19,12 @@ Z_INTERNAL block_state deflate_slow(deflate_state *s, int flush) {
int bflush; /* set if current block must be flushed */
int64_t dist;
uint32_t match_len;
- match_func longest_match;
+ match_func *longest_match;
if (s->max_chain_length <= 1024)
- longest_match = functable.longest_match;
+ longest_match = &functable.longest_match;
else
- longest_match = functable.longest_match_slow;
+ longest_match = &functable.longest_match_slow;
/* Process the input block. */
for (;;) {
@@ -61,7 +61,7 @@ Z_INTERNAL block_state deflate_slow(deflate_state *s, int flush) {
* of window index 0 (in particular we have to avoid a match
* of the string with itself at the start of the input file).
*/
- match_len = longest_match(s, hash_head);
+ match_len = (*longest_match)(s, hash_head);
/* longest_match() sets match_start */
if (match_len <= 5 && (s->strategy == Z_FILTERED)) {