Remove unnecessary ring buffer boundary checks. PiperOrigin-RevId: 991583282
diff --git a/c/enc/hash.h b/c/enc/hash.h index 0340611..35addc8 100644 --- a/c/enc/hash.h +++ b/c/enc/hash.h
@@ -850,6 +850,8 @@ } #endif + BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); + for (i = 0; i < 4; ++i) { const size_t distance = (size_t)distance_cache[i]; size_t offset; @@ -893,7 +895,7 @@ limit = source_size - offset; limit = (limit > max_length) ? max_length : limit; if (distance > max_distance) continue; - if (best_len >= limit || + if (cur_ix_masked + best_len > ring_buffer_mask || best_len >= limit || /* compare 4 bytes ending at best_len + 1 */ BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) != BrotliUnalignedRead32(&source[offset + best_len - 3])) {
diff --git a/c/enc/hash_longest_match_simd_opt_inc.h b/c/enc/hash_longest_match_simd_opt_inc.h index 6c54fae..6985a5d 100644 --- a/c/enc/hash_longest_match_simd_opt_inc.h +++ b/c/enc/hash_longest_match_simd_opt_inc.h
@@ -190,7 +190,11 @@ } prev_ix &= ring_buffer_mask; - if (BrotliUnalignedRead16(&data[cur_ix_masked + best_len - 1]) != + if (cur_ix_masked + best_len > ring_buffer_mask) { + break; + } + if (prev_ix + best_len > ring_buffer_mask || + BrotliUnalignedRead16(&data[cur_ix_masked + best_len - 1]) != BrotliUnalignedRead16(&data[prev_ix + best_len - 1])) { continue; } @@ -240,7 +244,11 @@ break; } prev_ix &= ring_buffer_mask; - if (/* compare 4 bytes ending at best_len + 1 */ + if (cur_ix_masked + best_len > ring_buffer_mask) { + break; + } + if (prev_ix + best_len > ring_buffer_mask || + /* compare 4 bytes ending at best_len + 1 */ BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) != BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) { continue;