liblzma: Fix missing normalization in rc_encode_dummy().

Without this fix it could attempt to create too much output.
This commit is contained in:
Lasse Collin 2021-01-14 20:57:11 +02:00
parent 601ec0311e
commit 421b0aa352
1 changed files with 6 additions and 1 deletions

View File

@ -274,7 +274,7 @@ rc_encode_dummy(const lzma_range_encoder *rc, size_t out_size)
size_t pos = rc->pos;
while (pos < rc->count) {
while (true) {
// Normalize
if (range < RC_TOP_VALUE) {
if (rc_shift_low_dummy(&low, &cache_size, &cache,
@ -284,6 +284,11 @@ rc_encode_dummy(const lzma_range_encoder *rc, size_t out_size)
range <<= RC_SHIFT_BITS;
}
// This check is here because the normalization above must
// be done before flushing the last bytes.
if (pos == rc->count)
break;
// Encode a bit
switch (rc->symbols[pos]) {
case RC_BIT_0: {