diff --git a/Libraries/LibWeb/Compression/CompressionStream.cpp b/Libraries/LibWeb/Compression/CompressionStream.cpp index c6d12fb809e..d2679dd56cd 100644 --- a/Libraries/LibWeb/Compression/CompressionStream.cpp +++ b/Libraries/LibWeb/Compression/CompressionStream.cpp @@ -115,9 +115,8 @@ WebIDL::ExceptionOr CompressionStream::compress_and_enqueue_chunk(JS::Valu // 2. Let buffer be the result of compressing chunk with cs's format and context. auto maybe_buffer = [&]() -> ErrorOr { - if (auto buffer = WebIDL::underlying_buffer_source(chunk.as_object())) - return compress(buffer->buffer(), Finish::No); - return ByteBuffer {}; + auto chunk_buffer = TRY(WebIDL::get_buffer_source_copy(chunk.as_object())); + return compress(move(chunk_buffer), Finish::No); }(); if (maybe_buffer.is_error()) return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, MUST(String::formatted("Unable to compress chunk: {}", maybe_buffer.error())) }; diff --git a/Libraries/LibWeb/Compression/DecompressionStream.cpp b/Libraries/LibWeb/Compression/DecompressionStream.cpp index bc68d40c761..4de816e114e 100644 --- a/Libraries/LibWeb/Compression/DecompressionStream.cpp +++ b/Libraries/LibWeb/Compression/DecompressionStream.cpp @@ -117,11 +117,8 @@ WebIDL::ExceptionOr DecompressionStream::decompress_and_enqueue_chunk(JS:: // 2. Let buffer be the result of decompressing chunk with ds's format and context. If this results in an error, // then throw a TypeError. auto maybe_buffer = [&]() -> ErrorOr { - auto chunk_buffer = WebIDL::underlying_buffer_source(chunk.as_object()); - if (!chunk_buffer) - return ByteBuffer {}; - - TRY(m_input_stream->write_until_depleted(chunk_buffer->buffer())); + auto chunk_buffer = TRY(WebIDL::get_buffer_source_copy(chunk.as_object())); + TRY(m_input_stream->write_until_depleted(move(chunk_buffer))); auto decompressed = TRY(ByteBuffer::create_uninitialized(4096)); auto size = TRY(m_decompressor.visit([&](auto const& decompressor) -> ErrorOr { diff --git a/Tests/LibWeb/Text/expected/wpt-import/compression/compression-large-flush-output.any.txt b/Tests/LibWeb/Text/expected/wpt-import/compression/compression-large-flush-output.any.txt index a3ab97e1de4..c4769acfffc 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/compression/compression-large-flush-output.any.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/compression/compression-large-flush-output.any.txt @@ -2,7 +2,7 @@ Harness status: OK Found 3 tests -3 Fail -Fail deflate compression with large flush output -Fail gzip compression with large flush output -Fail deflate-raw compression with large flush output \ No newline at end of file +3 Pass +Pass deflate compression with large flush output +Pass gzip compression with large flush output +Pass deflate-raw compression with large flush output \ No newline at end of file