From 9ed8c0b1830fe652c6cf9943da7eec4efabc09df Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Sun, 29 Oct 2023 10:31:04 +0000 Subject: [PATCH] LibGfx/JPEG: Propagate errors when creating `JPEGLoadingContext` This allows the JPEG fuzzer to make progress. --- Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp | 7 ++++--- Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp index f6d8c5f675..3d2487ca4a 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp @@ -1926,9 +1926,9 @@ static ErrorOr decode_jpeg(JPEGLoadingContext& context) return {}; } -JPEGImageDecoderPlugin::JPEGImageDecoderPlugin(NonnullOwnPtr stream) +JPEGImageDecoderPlugin::JPEGImageDecoderPlugin(NonnullOwnPtr context) + : m_context(move(context)) { - m_context = JPEGLoadingContext::create(move(stream)).release_value_but_fixme_should_propagate_errors(); } JPEGImageDecoderPlugin::~JPEGImageDecoderPlugin() = default; @@ -1949,7 +1949,8 @@ bool JPEGImageDecoderPlugin::sniff(ReadonlyBytes data) ErrorOr> JPEGImageDecoderPlugin::create(ReadonlyBytes data) { auto stream = TRY(try_make(data)); - auto plugin = TRY(adopt_nonnull_own_or_enomem(new (nothrow) JPEGImageDecoderPlugin(move(stream)))); + auto context = TRY(JPEGLoadingContext::create(move(stream))); + auto plugin = TRY(adopt_nonnull_own_or_enomem(new (nothrow) JPEGImageDecoderPlugin(move(context)))); TRY(decode_header(*plugin->m_context)); return plugin; } diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.h b/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.h index 9e2468e117..b238e1c74a 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.h +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.h @@ -28,9 +28,9 @@ public: virtual ErrorOr> icc_data() override; private: - JPEGImageDecoderPlugin(NonnullOwnPtr); + JPEGImageDecoderPlugin(NonnullOwnPtr); - OwnPtr m_context; + NonnullOwnPtr m_context; }; }