summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2023-04-04 09:17:57 -0400
committerAndreas Kling <kling@serenityos.org>2023-04-04 19:16:06 +0200
commit26230f2ffdffc903ed2de1f3cfbd2affa977e376 (patch)
tree40d4da08440be6ab9447118497a9e1f8a948cb31
parent72d6a30e089069cacaa5ae4134ceaa93493d87a2 (diff)
downloadserenity-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.cpp18
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());
}
}