diff options
| author | Adam Stylinski <kungfujesus06@gmail.com> | 2022-02-21 16:46:18 -0500 |
|---|---|---|
| committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2022-02-23 14:47:49 +0100 |
| commit | 321028cde93dac9f47b9b92ad186c4cbffb77cf2 (patch) | |
| tree | b8167d0ad0ff7ccb87fc2b22807aea26c96ca563 | |
| parent | 319755304904e9f65644d0e2f5504c123f68794e (diff) | |
| download | Project-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.c | 8 |
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)) { |
