diff options
author | Evgenii Kliuchnikov <eustas@google.com> | 2023-04-14 15:46:39 +0000 |
---|---|---|
committer | Evgenii Kliuchnikov <eustas.ru@gmail.com> | 2023-07-04 07:54:41 +0000 |
commit | e1f5788fb0dfbe8003727802e931d1dbeaf68ae1 (patch) | |
tree | 8e03e3ecddb1b83fbcb9864b9403cf3d83fc419d | |
parent | c0a43495ea3e4dca590b8ad1f9ee0e7cb9bb3d83 (diff) | |
download | brotli-e1f5788fb0dfbe8003727802e931d1dbeaf68ae1.zip brotli-e1f5788fb0dfbe8003727802e931d1dbeaf68ae1.tar.gz brotli-e1f5788fb0dfbe8003727802e931d1dbeaf68ae1.tar.bz2 |
Fix internal buffer reset
PiperOrigin-RevId: 524301253
-rw-r--r-- | c/dec/decode.c | 5 |
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); |