From a955fd4156109ed20ed41e53a23366ef85e88a7c Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Mon, 15 Mar 2021 17:20:20 +0200 Subject: [PATCH] LibCompress+AK: Propagate error handling to wrapped streams This ensures that when a DeflateCompressor stream is cleared of any errors its underlying wrapped streams (InputBitStream/InputMemoryStream) will be cleared as well and wont fail a VERIFY on destruction. --- AK/BitStream.h | 5 +++++ Userland/Libraries/LibCompress/Deflate.cpp | 5 +++++ Userland/Libraries/LibCompress/Deflate.h | 1 + 3 files changed, 11 insertions(+) diff --git a/AK/BitStream.h b/AK/BitStream.h index ec6563f338..02ba16cb63 100644 --- a/AK/BitStream.h +++ b/AK/BitStream.h @@ -116,6 +116,11 @@ public: m_next_byte.clear(); } + bool handle_any_error() override + { + return m_stream.handle_any_error() || Stream::handle_any_error(); + } + private: Optional m_next_byte; size_t m_bit_offset { 0 }; diff --git a/Userland/Libraries/LibCompress/Deflate.cpp b/Userland/Libraries/LibCompress/Deflate.cpp index 71cdec5ce9..654c2584df 100644 --- a/Userland/Libraries/LibCompress/Deflate.cpp +++ b/Userland/Libraries/LibCompress/Deflate.cpp @@ -321,6 +321,11 @@ bool DeflateDecompressor::discard_or_error(size_t count) bool DeflateDecompressor::unreliable_eof() const { return m_state == State::Idle && m_read_final_bock; } +bool DeflateDecompressor::handle_any_error() +{ + return m_input_stream.handle_any_error() || Stream::handle_any_error(); +} + Optional DeflateDecompressor::decompress_all(ReadonlyBytes bytes) { InputMemoryStream memory_stream { bytes }; diff --git a/Userland/Libraries/LibCompress/Deflate.h b/Userland/Libraries/LibCompress/Deflate.h index 06958bbfa1..d5bfc74c8a 100644 --- a/Userland/Libraries/LibCompress/Deflate.h +++ b/Userland/Libraries/LibCompress/Deflate.h @@ -102,6 +102,7 @@ public: bool discard_or_error(size_t) override; bool unreliable_eof() const override; + bool handle_any_error() override; static Optional decompress_all(ReadonlyBytes);