diff options
Diffstat (limited to 'c/enc/hash_forgetful_chain_inc.h')
-rw-r--r-- | c/enc/hash_forgetful_chain_inc.h | 9 |
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; } { |