Sfoglia il codice sorgente

LibCompress+Tests: Demonstrate and fix faulty metadata length

The test-case is heavily inspired by:
https://github.com/google/brotli/blob/master/tests/testdata/x.compressed.01
Or in words: A metadata meta-block containing `Y` (which should be
ignored), and then the actual data (a single `Z`). The bug used to skip
one metadata byte too few, and thus read garbage.
Ben Wiederhake 2 anni fa
parent
commit
8de7a91571

+ 5 - 0
Tests/LibCompress/TestBrotli.cpp

@@ -75,6 +75,11 @@ TEST_CASE(brotli_decompress_katica_regular_10_font)
     run_test("KaticaRegular10.font"sv);
 }
 
+TEST_CASE(brotli_single_z)
+{
+    run_test("single-z.txt"sv);
+}
+
 TEST_CASE(brotli_decompress_zero_one_bin)
 {
     // This makes sure that the tests will run both on target and in Lagom.

+ 1 - 0
Tests/LibCompress/brotli-test-files/single-z.txt

@@ -0,0 +1 @@
+Z

BIN
Tests/LibCompress/brotli-test-files/single-z.txt.br


+ 1 - 1
Userland/Libraries/LibCompress/Brotli.cpp

@@ -605,7 +605,7 @@ ErrorOr<Bytes> BrotliDecompressionStream::read(Bytes output_buffer)
                     return Error::from_string_literal("invalid reserved bit");
 
                 size_t skip_bytes = TRY(m_input_stream.read_bits(2));
-                size_t skip_length = TRY(m_input_stream.read_bits(8 * skip_bytes));
+                size_t skip_length = 1 + TRY(m_input_stream.read_bits(8 * skip_bytes));
 
                 u8 remainder = m_input_stream.align_to_byte_boundary();
                 if (remainder != 0)