ImageDecoder: Fix assertion after failed decode

We were calling value() on an ErrorOr containing an error when trying
to extract the frame duration after a failed decode.

This fixes ImageDecoder crashing on various websites.
This commit is contained in:
Andreas Kling 2021-11-29 13:10:07 +01:00
parent dcc7d7d566
commit da42c1552c
Notes: sideshowbarker 2024-07-18 00:32:32 +09:00

View File

@ -53,11 +53,14 @@ Messages::ImageDecoderServer::DecodeImageResponse ClientConnection::decode_image
Vector<u32> durations;
for (size_t i = 0; i < decoder->frame_count(); ++i) {
auto frame_or_error = decoder->frame(i);
if (frame_or_error.is_error() || !frame_or_error.value().image)
if (frame_or_error.is_error()) {
bitmaps.append(Gfx::ShareableBitmap {});
else
bitmaps.append(frame_or_error.value().image->to_shareable_bitmap());
durations.append(frame_or_error.value().duration);
durations.append(0);
} else {
auto frame = frame_or_error.release_value();
bitmaps.append(frame.image->to_shareable_bitmap());
durations.append(frame.duration);
}
}
return { decoder->is_animated(), static_cast<u32>(decoder->loop_count()), bitmaps, durations };