mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-19 17:27:51 +03:00
LibCompress: Handle and propagate stream errors in GzipDecompressor
This commit makes read short-circuit if its input stream errored, as well as propagate error handling to wrapped sub streams, similarly to DeflateDecompressor.
This commit is contained in:
parent
ea5f83616e
commit
eb343296ce
Notes:
sideshowbarker
2024-07-18 21:18:24 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/eb343296ce2 Pull-request: https://github.com/SerenityOS/serenity/pull/5818
@ -78,6 +78,11 @@ size_t GzipDecompressor::read(Bytes bytes)
|
||||
current_member().m_checksum.update(bytes.trim(nread));
|
||||
current_member().m_nread += nread;
|
||||
|
||||
if (current_member().m_stream.handle_any_error()) {
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (nread < bytes.size()) {
|
||||
LittleEndian<u32> crc32, input_size;
|
||||
m_input_stream >> crc32 >> input_size;
|
||||
@ -188,6 +193,12 @@ Optional<ByteBuffer> GzipDecompressor::decompress_all(ReadonlyBytes bytes)
|
||||
|
||||
bool GzipDecompressor::unreliable_eof() const { return m_eof; }
|
||||
|
||||
bool GzipDecompressor::handle_any_error()
|
||||
{
|
||||
bool handled_errors = m_input_stream.handle_any_error();
|
||||
return Stream::handle_any_error() || handled_errors;
|
||||
}
|
||||
|
||||
GzipCompressor::GzipCompressor(OutputStream& stream)
|
||||
: m_output_stream(stream)
|
||||
{
|
||||
|
@ -67,6 +67,7 @@ public:
|
||||
bool discard_or_error(size_t) override;
|
||||
|
||||
bool unreliable_eof() const override;
|
||||
bool handle_any_error() override;
|
||||
|
||||
static Optional<ByteBuffer> decompress_all(ReadonlyBytes);
|
||||
static bool is_likely_compressed(ReadonlyBytes bytes);
|
||||
|
Loading…
Reference in New Issue
Block a user