aboutsummaryrefslogtreecommitdiff
path: root/c/enc/hash_forgetful_chain_inc.h
diff options
context:
space:
mode:
Diffstat (limited to 'c/enc/hash_forgetful_chain_inc.h')
-rw-r--r--c/enc/hash_forgetful_chain_inc.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/c/enc/hash_forgetful_chain_inc.h b/c/enc/hash_forgetful_chain_inc.h
index 48e1cdc..9a8efeb 100644
--- a/c/enc/hash_forgetful_chain_inc.h
+++ b/c/enc/hash_forgetful_chain_inc.h
@@ -241,6 +241,11 @@ static BROTLI_INLINE void FN(FindLongestMatch)(
}
}
}
+ /* we require matches of len >4, so increase best_len to 3, so we can compare
+ * 4 bytes all the time. */
+ if (best_len < 3) {
+ best_len = 3;
+ }
{
const size_t bank = key & (NUM_BANKS - 1);
size_t backward = 0;
@@ -257,7 +262,9 @@ static BROTLI_INLINE void FN(FindLongestMatch)(
delta = banks[bank].slots[last].delta;
if (cur_ix_masked + best_len > ring_buffer_mask ||
prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
+ /* compare 4 bytes ending at best_len + 1 */
+ BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=
+ BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {
continue;
}
{