Ensure that beginMarkedContentProps/endMarkedContent-operators, for /XObjects, are balanced in corrupt documents (PR 13854 follow-up)

Something that I *just* realized is that while PR 13854 fixed an issue as reported, it could still cause bugs in other similarily broken documents since we'll not insert a matching endMarkedContent-operator in the operatorList.
This commit is contained in:
Jonas Jenwald 2021-08-26 17:05:30 +02:00
parent 1a1de9bb3e
commit b34d2cdc42

View File

@ -461,13 +461,15 @@ class PartialEvaluator {
} else { } else {
bbox = null; bbox = null;
} }
let optionalContent = null,
groupOptions; let optionalContent, groupOptions;
if (dict.has("OC")) { if (dict.has("OC")) {
optionalContent = await this.parseMarkedContentProps( optionalContent = await this.parseMarkedContentProps(
dict.get("OC"), dict.get("OC"),
resources resources
); );
}
if (optionalContent !== undefined) {
operatorList.addOp(OPS.beginMarkedContentProps, ["OC", optionalContent]); operatorList.addOp(OPS.beginMarkedContentProps, ["OC", optionalContent]);
} }
const group = dict.get("Group"); const group = dict.get("Group");
@ -528,7 +530,7 @@ class PartialEvaluator {
operatorList.addOp(OPS.endGroup, [groupOptions]); operatorList.addOp(OPS.endGroup, [groupOptions]);
} }
if (optionalContent) { if (optionalContent !== undefined) {
operatorList.addOp(OPS.endMarkedContent, []); operatorList.addOp(OPS.endMarkedContent, []);
} }
}); });
@ -575,12 +577,14 @@ class PartialEvaluator {
return; return;
} }
let optionalContent = null; let optionalContent;
if (dict.has("OC")) { if (dict.has("OC")) {
optionalContent = await this.parseMarkedContentProps( optionalContent = await this.parseMarkedContentProps(
dict.get("OC"), dict.get("OC"),
resources resources
); );
}
if (optionalContent !== undefined) {
operatorList.addOp(OPS.beginMarkedContentProps, ["OC", optionalContent]); operatorList.addOp(OPS.beginMarkedContentProps, ["OC", optionalContent]);
} }
@ -620,7 +624,7 @@ class PartialEvaluator {
}); });
} }
if (optionalContent) { if (optionalContent !== undefined) {
operatorList.addOp(OPS.endMarkedContent, []); operatorList.addOp(OPS.endMarkedContent, []);
} }
return; return;
@ -645,7 +649,7 @@ class PartialEvaluator {
imgData = imageObj.createImageData(/* forceRGBA = */ true); imgData = imageObj.createImageData(/* forceRGBA = */ true);
operatorList.addOp(OPS.paintInlineImageXObject, [imgData]); operatorList.addOp(OPS.paintInlineImageXObject, [imgData]);
if (optionalContent) { if (optionalContent !== undefined) {
operatorList.addOp(OPS.endMarkedContent, []); operatorList.addOp(OPS.endMarkedContent, []);
} }
return; return;
@ -717,7 +721,7 @@ class PartialEvaluator {
} }
} }
if (optionalContent) { if (optionalContent !== undefined) {
operatorList.addOp(OPS.endMarkedContent, []); operatorList.addOp(OPS.endMarkedContent, []);
} }
} }