From ef8ae5449dc30782451beba64fdd0af86e1cb931 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 8 Aug 2017 21:44:37 -0400 Subject: Allow QPDFTokenizer::readToken to return bad tokens Sometimes we want to ignore bad tokens rather than having them throw an exception. A coverage case is commented out here and added in a later commit. --- libqpdf/QPDFTokenizer.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'libqpdf/QPDFTokenizer.cc') diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc index f7124e49..c0e09279 100644 --- a/libqpdf/QPDFTokenizer.cc +++ b/libqpdf/QPDFTokenizer.cc @@ -475,7 +475,8 @@ QPDFTokenizer::betweenTokens() QPDFTokenizer::Token QPDFTokenizer::readToken(PointerHolder input, - std::string const& context) + std::string const& context, + bool allow_bad) { qpdf_offset_t offset = input->tell(); Token token; @@ -514,13 +515,20 @@ QPDFTokenizer::readToken(PointerHolder input, input->unreadCh(char_to_unread); } + input->setLastOffset(offset); + if (token.getType() == tt_bad) { - throw QPDFExc(qpdf_e_damaged_pdf, input->getName(), - context, offset, token.getErrorMessage()); + if (allow_bad) + { +// QTC::TC("qpdf", "QPDFTokenizer allowing bad token"); + } + else + { + throw QPDFExc(qpdf_e_damaged_pdf, input->getName(), + context, offset, token.getErrorMessage()); + } } - input->setLastOffset(offset); - return token; } -- cgit v1.2.3-70-g09d2