Eagerly initialize the ringbuffer tail. PiperOrigin-RevId: 982189567
diff --git a/c/enc/backward_references_hq.c b/c/enc/backward_references_hq.c index 07e82d1..a4718b5 100644 --- a/c/enc/backward_references_hq.c +++ b/c/enc/backward_references_hq.c
@@ -433,8 +433,6 @@ const CompoundDictionary* addon = ¶ms->dictionary.compound; size_t gap = addon->total_size; - BROTLI_DCHECK(cur_ix_masked + max_len <= ringbuffer_mask + 1); - EvaluateNode(block_start + stream_offset, pos, max_backward_limit, gap, starting_dist_cache, model, queue, nodes);
diff --git a/c/enc/hash.h b/c/enc/hash.h index c88a6c5..2e0b047 100644 --- a/c/enc/hash.h +++ b/c/enc/hash.h
@@ -568,8 +568,6 @@ source = (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail); } - 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; @@ -679,8 +677,6 @@ source = (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail); } - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - while (item == 0) { size_t offset; size_t distance;
diff --git a/c/enc/hash_forgetful_chain_inc.h b/c/enc/hash_forgetful_chain_inc.h index b653698..31269bc 100644 --- a/c/enc/hash_forgetful_chain_inc.h +++ b/c/enc/hash_forgetful_chain_inc.h
@@ -213,8 +213,6 @@ out->len = 0; out->len_code_delta = 0; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - /* Try last distance first. */ for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) { const size_t backward = (size_t)distance_cache[i];
diff --git a/c/enc/hash_longest_match64_inc.h b/c/enc/hash_longest_match64_inc.h index 3131451..4e6d7d6 100644 --- a/c/enc/hash_longest_match64_inc.h +++ b/c/enc/hash_longest_match64_inc.h
@@ -178,8 +178,6 @@ out->len = 0; out->len_code_delta = 0; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - /* Try last distance first. */ for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i];
diff --git a/c/enc/hash_longest_match64_simd_inc.h b/c/enc/hash_longest_match64_simd_inc.h index 17dc67d..ea16330 100644 --- a/c/enc/hash_longest_match64_simd_inc.h +++ b/c/enc/hash_longest_match64_simd_inc.h
@@ -195,8 +195,6 @@ out->len = 0; out->len_code_delta = 0; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - /* Try last distance first. */ for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i];
diff --git a/c/enc/hash_longest_match_inc.h b/c/enc/hash_longest_match_inc.h index 674dced..ddf155f 100644 --- a/c/enc/hash_longest_match_inc.h +++ b/c/enc/hash_longest_match_inc.h
@@ -178,8 +178,6 @@ out->len = 0; out->len_code_delta = 0; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - /* Try last distance first. */ for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i];
diff --git a/c/enc/hash_longest_match_quickly_inc.h b/c/enc/hash_longest_match_quickly_inc.h index 12fdb44..8fa8bf9 100644 --- a/c/enc/hash_longest_match_quickly_inc.h +++ b/c/enc/hash_longest_match_quickly_inc.h
@@ -165,8 +165,6 @@ size_t cached_backward = (size_t)distance_cache[0]; size_t prev_ix = cur_ix - cached_backward; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - out->len_code_delta = 0; if (prev_ix < cur_ix && cached_backward <= max_backward) { prev_ix &= (uint32_t)ring_buffer_mask;
diff --git a/c/enc/hash_longest_match_simd_inc.h b/c/enc/hash_longest_match_simd_inc.h index 075f6da..6b92380 100644 --- a/c/enc/hash_longest_match_simd_inc.h +++ b/c/enc/hash_longest_match_simd_inc.h
@@ -170,8 +170,6 @@ out->len = 0; out->len_code_delta = 0; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - /* Try last distance first. */ for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i];
diff --git a/c/enc/hash_longest_match_simd_opt_inc.h b/c/enc/hash_longest_match_simd_opt_inc.h index 075f6da..6b92380 100644 --- a/c/enc/hash_longest_match_simd_opt_inc.h +++ b/c/enc/hash_longest_match_simd_opt_inc.h
@@ -170,8 +170,6 @@ out->len = 0; out->len_code_delta = 0; - BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1); - /* Try last distance first. */ for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i];
diff --git a/c/enc/ringbuffer.h b/c/enc/ringbuffer.h index 5bb75ed..71ba9a5 100644 --- a/c/enc/ringbuffer.h +++ b/c/enc/ringbuffer.h
@@ -123,9 +123,11 @@ later when we copy the last two bytes to the first two positions. */ rb->buffer_[rb->size_ - 2] = 0; rb->buffer_[rb->size_ - 1] = 0; - /* Initialize tail; might be touched by "best_len++" optimization when - ring buffer is "full". */ - rb->buffer_[rb->size_] = 241; + /* Mirror the bytes written by the "first write" shortcut (see above) into + the tail. That deliberately avoids initializing the ring buffer tail, + but that requires that we copy the bytes here. */ + memcpy(&rb->buffer_[rb->size_], rb->buffer_, + BROTLI_MIN(size_t, rb->pos_, rb->tail_size_)); } { const size_t masked_pos = rb->pos_ & rb->mask_;