From ca94ac68d9cdb317328398c770c9c755f0004535 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Thu, 3 Jan 2019 11:51:58 -0500 Subject: Honor flags when flattening annotations --- libqpdf/QPDFAnnotationObjectHelper.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'libqpdf/QPDFAnnotationObjectHelper.cc') diff --git a/libqpdf/QPDFAnnotationObjectHelper.cc b/libqpdf/QPDFAnnotationObjectHelper.cc index ca4af907..3295fd3a 100644 --- a/libqpdf/QPDFAnnotationObjectHelper.cc +++ b/libqpdf/QPDFAnnotationObjectHelper.cc @@ -81,7 +81,8 @@ QPDFAnnotationObjectHelper::getAppearanceStream( std::string QPDFAnnotationObjectHelper::getPageContentForAppearance( - std::string const& name, int rotate) + std::string const& name, int rotate, + int required_flags, int forbidden_flags) { if (! getAppearanceStream("/N").isStream()) { @@ -168,11 +169,24 @@ QPDFAnnotationObjectHelper::getPageContentForAppearance( // appearance matrix. QPDFObjectHandle rect_obj = this->oh.getKey("/Rect"); - QPDFObjectHandle flags = this->oh.getKey("/F"); + QPDFObjectHandle flags_obj = this->oh.getKey("/F"); QPDFObjectHandle as = getAppearanceStream("/N").getDict(); QPDFObjectHandle bbox_obj = as.getKey("/BBox"); QPDFObjectHandle matrix_obj = as.getKey("/Matrix"); + int flags = flags_obj.isInteger() ? flags_obj.getIntValue() : 0; + + if (flags & forbidden_flags) + { + QTC::TC("qpdf", "QPDFAnnotationObjectHelper forbidden flags"); + return ""; + } + if ((flags & required_flags) != required_flags) + { + QTC::TC("qpdf", "QPDFAnnotationObjectHelper missing required flags"); + return ""; + } + if (! (bbox_obj.isRectangle() && rect_obj.isRectangle())) { return ""; @@ -188,8 +202,7 @@ QPDFAnnotationObjectHelper::getPageContentForAppearance( QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix"); } QPDFObjectHandle::Rectangle rect = rect_obj.getArrayAsRectangle(); - bool do_rotate = (rotate && flags.isInteger() && - (flags.getIntValue() & 16)); + bool do_rotate = (rotate && (flags & an_no_rotate)); if (do_rotate) { // If the the annotation flags include the NoRotate bit and -- cgit v1.2.3-54-g00ecf