From 8b3797569d0b09bf358e344136ce4d8a60e7a214 Mon Sep 17 00:00:00 2001 From: m-holger Date: Wed, 5 Mar 2025 17:38:22 +0000 Subject: [PATCH] Add new method QPDFParser::make_description --- libqpdf/QPDFObjectHandle.cc | 3 ++- libqpdf/qpdf/QPDFParser.hh | 33 +++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 9a216fb..f4c71cd 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -1621,6 +1621,7 @@ QPDFObjectHandle::parseContentStream_data( auto input = BufferInputSource(description, stream_data.get()); Tokenizer tokenizer; tokenizer.allowEOF(); + auto sp_description = QPDFParser::make_description(description, "content"); bool empty = false; while (QIntC::to_size(input.tell()) < stream_length) { // Read a token and seek to the beginning. The offset we get from this process is the @@ -1630,7 +1631,7 @@ QPDFObjectHandle::parseContentStream_data( qpdf_offset_t offset = input.getLastOffset(); input.seek(offset, SEEK_SET); auto obj = - QPDFParser(input, "content", tokenizer, nullptr, context, false).parse(empty, true); + QPDFParser(input, sp_description, "content", tokenizer, context).parse(empty, true); if (!obj) { // EOF break; diff --git a/libqpdf/qpdf/QPDFParser.hh b/libqpdf/qpdf/QPDFParser.hh index c12c3a8..ae0c394 100644 --- a/libqpdf/qpdf/QPDFParser.hh +++ b/libqpdf/qpdf/QPDFParser.hh @@ -26,9 +26,7 @@ class QPDFParser tokenizer(*tokenizer.m), decrypter(decrypter), context(context), - description( - std::make_shared( - std::string(input.getName() + ", " + object_description + " at offset $PO"))), + description(make_description(input.getName(), object_description)), parse_pdf(parse_pdf) { } @@ -45,16 +43,39 @@ class QPDFParser tokenizer(tokenizer), decrypter(decrypter), context(context), - description( - std::make_shared( - std::string(input.getName() + ", " + object_description + " at offset $PO"))), + description(make_description(input.getName(), object_description)), parse_pdf(parse_pdf) { } + + // Used by parseContentStream_data only + QPDFParser( + InputSource& input, + std::shared_ptr sp_description, + std::string const& object_description, + qpdf::Tokenizer& tokenizer, + QPDF* context) : + input(input), + object_description(object_description), + tokenizer(tokenizer), + decrypter(nullptr), + context(context), + description(std::move(sp_description)), + parse_pdf(false) + { + } ~QPDFParser() = default; QPDFObjectHandle parse(bool& empty, bool content_stream); + static std::shared_ptr + make_description(std::string const& input_name, std::string const& object_description) + { + using namespace std::literals; + return std::make_shared( + input_name + ", " + object_description + " at offset $PO"); + } + private: // Parser state. Note: // state <= st_dictionary_value == (state = st_dictionary_key || state = st_dictionary_value) -- libgit2 0.21.4