diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 2f0fe5821..1e2481e57 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -567,12 +567,21 @@ class PartialEvaluator { if (!(w && isNum(w)) || !(h && isNum(h))) { warn("Image dimensions are missing, or not numbers."); - return undefined; + return; } const maxImageSize = this.options.maxImageSize; if (maxImageSize !== -1 && w * h > maxImageSize) { warn("Image exceeded maximum allowed size and was removed."); - return undefined; + return; + } + + let optionalContent = null; + if (dict.has("OC")) { + optionalContent = await this.parseMarkedContentProps( + dict.get("OC"), + resources + ); + operatorList.addOp(OPS.beginMarkedContentProps, ["OC", optionalContent]); } const imageMask = dict.get("ImageMask", "IM") || false; @@ -610,7 +619,11 @@ class PartialEvaluator { args, }); } - return undefined; + + if (optionalContent) { + operatorList.addOp(OPS.endMarkedContent, []); + } + return; } const softMask = dict.get("SMask", "SM") || false; @@ -631,7 +644,11 @@ class PartialEvaluator { // any other kind. imgData = imageObj.createImageData(/* forceRGBA = */ true); operatorList.addOp(OPS.paintInlineImageXObject, [imgData]); - return undefined; + + if (optionalContent) { + operatorList.addOp(OPS.endMarkedContent, []); + } + return; } // If there is no imageMask, create the PDFImage and a lot @@ -699,7 +716,10 @@ class PartialEvaluator { } } } - return undefined; + + if (optionalContent) { + operatorList.addOp(OPS.endMarkedContent, []); + } } handleSMask( diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 41f4da7da..49aadc5b7 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -442,6 +442,7 @@ !issue8097_reduced.pdf !quadpoints.pdf !transparent.pdf +!issue13931.pdf !xobject-image.pdf !issue6605.pdf !ccitt_EndOfBlock_false.pdf diff --git a/test/pdfs/issue13931.pdf b/test/pdfs/issue13931.pdf new file mode 100644 index 000000000..f953c1e23 Binary files /dev/null and b/test/pdfs/issue13931.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 4826b45ab..5b4c4fdcc 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -5019,6 +5019,12 @@ "rounds": 1, "type": "eq" }, + { "id": "issue13931-default", + "file": "pdfs/issue13931.pdf", + "md5": "799d5025787115d22863ae23a3042491", + "rounds": 1, + "type": "eq" + }, { "id": "issue2829", "file": "pdfs/issue2829.pdf", "md5": "f32b28cf8792f6ccc470446bfbb38584",