From 33443f799166c703c2a10d9ac0c13255ecf53b6e Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 19 Oct 2023 21:54:34 -0400 Subject: [PATCH] LibPDF: Implement ICCBasedColorSpace::number_of_components() We now no longer crash on images that use an ICC-based color space. Reduces number of crashes on 300 random PDFs from the web (the first 300 from 0000.zip from https://pdfa.org/new-large-scale-pdf-corpus-now-publicly-available/) from 81 (27%) to 64 (21%). Also fixes all remaining crashes in 411_getting_started_with_instruments.pdf and 513_high_efficiency_image_file_format.pdf. --- Userland/Libraries/LibPDF/ColorSpace.cpp | 5 +++++ Userland/Libraries/LibPDF/ColorSpace.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibPDF/ColorSpace.cpp b/Userland/Libraries/LibPDF/ColorSpace.cpp index 6804e968ee..2e2edd6e52 100644 --- a/Userland/Libraries/LibPDF/ColorSpace.cpp +++ b/Userland/Libraries/LibPDF/ColorSpace.cpp @@ -354,6 +354,11 @@ PDFErrorOr ICCBasedColorSpace::color(Vector const& arguments) cons return Color(output[0], output[1], output[2]); } +int ICCBasedColorSpace::number_of_components() const +{ + return Gfx::ICC::number_of_components_in_color_space(m_profile->data_color_space()); +} + Vector ICCBasedColorSpace::default_decode() const { auto color_space = m_profile->data_color_space(); diff --git a/Userland/Libraries/LibPDF/ColorSpace.h b/Userland/Libraries/LibPDF/ColorSpace.h index 753930f26e..1e110bb474 100644 --- a/Userland/Libraries/LibPDF/ColorSpace.h +++ b/Userland/Libraries/LibPDF/ColorSpace.h @@ -133,7 +133,7 @@ public: ~ICCBasedColorSpace() override = default; PDFErrorOr color(Vector const& arguments) const override; - int number_of_components() const override { VERIFY_NOT_REACHED(); } + int number_of_components() const override; Vector default_decode() const override; ColorSpaceFamily const& family() const override { return ColorSpaceFamily::ICCBased; }