diff options
author | Nico Weber <thakis@chromium.org> | 2023-04-04 09:17:57 -0400 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-04-04 19:16:06 +0200 |
commit | 26230f2ffdffc903ed2de1f3cfbd2affa977e376 (patch) | |
tree | 40d4da08440be6ab9447118497a9e1f8a948cb31 | |
parent | 72d6a30e089069cacaa5ae4134ceaa93493d87a2 (diff) | |
download | serenity-26230f2ffdffc903ed2de1f3cfbd2affa977e376.zip |
LibCompress: Order branches in Deflate's decode_codes() numerically
deflate_special_code_length_copy has value 16, so it should be
before the two zero-filling branches for codes 17 and 18.
Also, the initial if also refers to deflate_special_code_length_copy
as well, so if it's repeated right in the next else, one has to keep
it on the mental stack for shorter when reading this code.
No behavior change.
-rw-r--r-- | Userland/Libraries/LibCompress/Deflate.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/Userland/Libraries/LibCompress/Deflate.cpp b/Userland/Libraries/LibCompress/Deflate.cpp index 3433dac6de..a1cb09ddcc 100644 --- a/Userland/Libraries/LibCompress/Deflate.cpp +++ b/Userland/Libraries/LibCompress/Deflate.cpp @@ -437,23 +437,21 @@ ErrorOr<void> DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Opt if (symbol < deflate_special_code_length_copy) { code_lengths.append(static_cast<u8>(symbol)); + } else if (symbol == deflate_special_code_length_copy) { + if (code_lengths.is_empty()) + return Error::from_string_literal("Found no codes to copy before a copy block"); + auto nrepeat = 3 + TRY(m_input_stream->read_bits(2)); + for (size_t j = 0; j < nrepeat; ++j) + code_lengths.append(code_lengths.last()); } else if (symbol == deflate_special_code_length_zeros) { auto nrepeat = 3 + TRY(m_input_stream->read_bits(3)); for (size_t j = 0; j < nrepeat; ++j) code_lengths.append(0); - } else if (symbol == deflate_special_code_length_long_zeros) { + } else { + VERIFY(symbol == deflate_special_code_length_long_zeros); auto nrepeat = 11 + TRY(m_input_stream->read_bits(7)); for (size_t j = 0; j < nrepeat; ++j) code_lengths.append(0); - } else { - VERIFY(symbol == deflate_special_code_length_copy); - - if (code_lengths.is_empty()) - return Error::from_string_literal("Found no codes to copy before a copy block"); - - auto nrepeat = 3 + TRY(m_input_stream->read_bits(2)); - for (size_t j = 0; j < nrepeat; ++j) - code_lengths.append(code_lengths.last()); } } |