1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 22:07:35 +00: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:
Idan Horowitz 2021-03-16 15:20:46 +02:00 committed by Andreas Kling
parent ea5f83616e
commit eb343296ce
2 changed files with 12 additions and 0 deletions

View file

@ -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)
{