From a15ec6967dd3312223a6ab7d4198655234e1a4bf Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Mon, 1 Mar 2021 17:34:47 -0500 Subject: Enhancements to ParserCallbacks --- libqpdf/QPDFObjectHandle.cc | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'libqpdf/QPDFObjectHandle.cc') diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 6d4f10ce..35a4962a 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -151,6 +151,16 @@ QPDFObjectHandle::ParserCallbacks::handleObject( handleObject(oh); } +void +QPDFObjectHandle::ParserCallbacks::handleWarning() +{ +} + +void +QPDFObjectHandle::ParserCallbacks::handleEOF() +{ +} + void QPDFObjectHandle::ParserCallbacks::contentSize(size_t) { @@ -1847,10 +1857,15 @@ QPDFObjectHandle::parseContentStream_internal( pipeContentStreams(&buf, description, all_description); PointerHolder stream_data = buf.getBuffer(); callbacks->contentSize(stream_data->getSize()); + QPDF* context = getOwningQPDF(); + if ((! context) && isArray() && (getArrayNItems() > 0)) + { + context = getArrayItem(0).getOwningQPDF(); + } try { parseContentStream_data(stream_data, all_description, - callbacks, getOwningQPDF()); + callbacks, context); } catch (TerminateParsing&) { @@ -1881,9 +1896,15 @@ QPDFObjectHandle::parseContentStream_data( tokenizer.readToken(input, "content", true); qpdf_offset_t offset = input->getLastOffset(); input->seek(offset, SEEK_SET); + size_t before_nwarnings = (context ? context->numWarnings() : 0); QPDFObjectHandle obj = parseInternal(input, "content", tokenizer, empty, 0, context, true); + size_t after_nwarnings = (context ? context->numWarnings() : 0); + if (after_nwarnings > before_nwarnings) + { + callbacks->handleWarning(); + } if (! obj.isInitialized()) { // EOF @@ -1910,6 +1931,7 @@ QPDFObjectHandle::parseContentStream_data( QPDFExc(qpdf_e_damaged_pdf, input->getName(), "stream data", input->tell(), "EOF found while reading inline image")); + callbacks->handleWarning(); } else { -- cgit v1.2.3-54-g00ecf