aboutsummaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorEvgenii Kliuchnikov <eustas@google.com>2023-04-14 15:46:39 +0000
committerEvgenii Kliuchnikov <eustas.ru@gmail.com>2023-07-04 07:54:41 +0000
commite1f5788fb0dfbe8003727802e931d1dbeaf68ae1 (patch)
tree8e03e3ecddb1b83fbcb9864b9403cf3d83fc419d /c
parentc0a43495ea3e4dca590b8ad1f9ee0e7cb9bb3d83 (diff)
downloadbrotli-e1f5788fb0dfbe8003727802e931d1dbeaf68ae1.zip
brotli-e1f5788fb0dfbe8003727802e931d1dbeaf68ae1.tar.gz
brotli-e1f5788fb0dfbe8003727802e931d1dbeaf68ae1.tar.bz2
Fix internal buffer reset
PiperOrigin-RevId: 524301253
Diffstat (limited to 'c')
-rw-r--r--c/dec/decode.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/c/dec/decode.c b/c/dec/decode.c
index fe8af63..de46eb4 100644
--- a/c/dec/decode.c
+++ b/c/dec/decode.c
@@ -116,6 +116,10 @@ static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
BrotliDecoderState* s, BrotliDecoderErrorCode e, size_t consumed_input) {
s->error_code = (int)e;
s->used_input += consumed_input;
+ if ((s->buffer_length != 0) && (s->br.next_in == s->br.last_in)) {
+ /* If internal buffer is depleted at last, reset it. */
+ s->buffer_length = 0;
+ }
switch (e) {
case BROTLI_DECODER_SUCCESS:
return BROTLI_DECODER_RESULT_SUCCESS;
@@ -2351,6 +2355,7 @@ BrotliDecoderResult BrotliDecoderDecompressStream(
/* Not enough data in buffer, but can take one more byte from
input stream. */
result = BROTLI_DECODER_SUCCESS;
+ BROTLI_DCHECK(s->buffer_length < 8);
s->buffer.u8[s->buffer_length] = **next_in;
s->buffer_length++;
BrotliBitReaderSetInput(br, &s->buffer.u8[0], s->buffer_length);