From 532230c0e4413b134b089a771093fe015beb030c Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sun, 23 Jul 2023 22:45:39 -0400 Subject: [PATCH] LibPDF: Extract a Document::read_filters() method No behavior change. --- Userland/Libraries/LibPDF/Document.cpp | 17 +++++++++++++++++ Userland/Libraries/LibPDF/Document.h | 2 ++ Userland/Libraries/LibPDF/Parser.cpp | 12 +----------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Userland/Libraries/LibPDF/Document.cpp b/Userland/Libraries/LibPDF/Document.cpp index 8de51e8b75..d5b3c671df 100644 --- a/Userland/Libraries/LibPDF/Document.cpp +++ b/Userland/Libraries/LibPDF/Document.cpp @@ -297,6 +297,23 @@ PDFErrorOr> Document::info_dict() return InfoDict(this, TRY(trailer()->get_dict(this, CommonNames::Info))); } +PDFErrorOr> Document::read_filters(NonnullRefPtr dict) +{ + Vector filters; + + // We may either get a single filter or an array of cascading filters + auto filter_object = TRY(dict->get_object(this, CommonNames::Filter)); + if (filter_object->is()) { + auto filter_array = filter_object->cast(); + for (size_t i = 0; i < filter_array->size(); ++i) + filters.append(TRY(filter_array->get_name_at(this, i))->name()); + } else { + filters.append(filter_object->cast()->name()); + } + + return filters; +} + PDFErrorOr Document::build_page_tree() { auto page_tree = TRY(m_catalog->get_dict(this, CommonNames::Pages)); diff --git a/Userland/Libraries/LibPDF/Document.h b/Userland/Libraries/LibPDF/Document.h index d302c3832b..0c6c7298b4 100644 --- a/Userland/Libraries/LibPDF/Document.h +++ b/Userland/Libraries/LibPDF/Document.h @@ -146,6 +146,8 @@ public: PDFErrorOr> info_dict(); + PDFErrorOr> read_filters(NonnullRefPtr); + private: explicit Document(NonnullRefPtr const& parser); diff --git a/Userland/Libraries/LibPDF/Parser.cpp b/Userland/Libraries/LibPDF/Parser.cpp index 33eb72ce8d..bf66f103fe 100644 --- a/Userland/Libraries/LibPDF/Parser.cpp +++ b/Userland/Libraries/LibPDF/Parser.cpp @@ -475,17 +475,7 @@ PDFErrorOr> Parser::parse_stream(NonnullRefPtrsecurity_handler()->decrypt(stream_object, m_current_reference_stack.last()); if (dict->contains(CommonNames::Filter) && m_enable_filters) { - Vector filters; - - // We may either get a single filter or an array of cascading filters - auto filter_object = TRY(dict->get_object(m_document, CommonNames::Filter)); - if (filter_object->is()) { - auto filter_array = filter_object->cast(); - for (size_t i = 0; i < filter_array->size(); ++i) - filters.append(TRY(filter_array->get_name_at(m_document, i))->name()); - } else { - filters.append(filter_object->cast()->name()); - } + Vector filters = TRY(m_document->read_filters(dict)); // Every filter may get its own parameter dictionary Vector> decode_parms_vector;