Skip to content

Commit

Permalink
Merge pull request #11296 from Snuffleupagus/parseColorSpace-stopAtEr…
Browse files Browse the repository at this point in the history
…rors

Allow skipping of errors when parsing broken/unsupported ColorSpaces (issue 6707, issue 11287)
  • Loading branch information
timvandermeij authored Nov 1, 2019
2 parents 0eda75c + 835d8c2 commit bbd2386
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 21 deletions.
65 changes: 44 additions & 21 deletions src/core/evaluator.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,11 +289,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
return false;
},

buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
xobj, smask,
operatorList,
task,
initialState) {
async buildFormXObject(resources, xobj, smask, operatorList, task,
initialState) {
var dict = xobj.dict;
var matrix = dict.getArray('Matrix');
var bbox = dict.getArray('BBox');
Expand All @@ -318,14 +315,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
groupOptions.isolated = (group.get('I') || false);
groupOptions.knockout = (group.get('K') || false);
if (group.has('CS')) {
colorSpace = group.get('CS');
if (colorSpace) {
colorSpace = ColorSpace.parse(colorSpace, this.xref, resources,
this.pdfFunctionFactory);
} else {
warn('buildFormXObject - invalid/non-existent Group /CS entry: ' +
group.getRaw('CS'));
}
colorSpace = await this.parseColorSpace({
cs: group.get('CS'),
resources,
});
}
}

Expand Down Expand Up @@ -934,6 +927,26 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
},

parseColorSpace({ cs, resources, }) {
return new Promise((resolve) => {
resolve(ColorSpace.parse(cs, this.xref, resources,
this.pdfFunctionFactory));
}).catch((reason) => {
if (reason instanceof AbortException) {
return null;
}
if (this.options.ignoreErrors) {
// Error(s) in the ColorSpace -- sending unsupported feature
// notification and allow rendering to continue.
this.handler.send('UnsupportedFeature',
{ featureId: UNSUPPORTED_FEATURES.unknown, });
warn(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
return null;
}
throw reason;
});
},

async handleColorN(operatorList, fn, args, cs, patterns, resources, task) {
// compile tiling patterns
var patternName = args[args.length - 1];
Expand Down Expand Up @@ -1158,15 +1171,25 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
break;

case OPS.setFillColorSpace:
stateManager.state.fillColorSpace =
ColorSpace.parse(args[0], xref, resources,
self.pdfFunctionFactory);
continue;
next(self.parseColorSpace({
cs: args[0],
resources,
}).then(function(colorSpace) {
if (colorSpace) {
stateManager.state.fillColorSpace = colorSpace;
}
}));
return;
case OPS.setStrokeColorSpace:
stateManager.state.strokeColorSpace =
ColorSpace.parse(args[0], xref, resources,
self.pdfFunctionFactory);
continue;
next(self.parseColorSpace({
cs: args[0],
resources,
}).then(function(colorSpace) {
if (colorSpace) {
stateManager.state.strokeColorSpace = colorSpace;
}
}));
return;
case OPS.setFillColor:
cs = stateManager.state.fillColorSpace;
args = cs.getRgb(args, 0);
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/issue11287.pdf.link
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://github.com/mozilla/pdf.js/files/3786520/FLEXSTEEL.PIPELINE.TECHNOLOGIES.INC.vs.FEDON.DARREN.LOUIS.201834640.No.80265332.Texas.State.Harris.County.113th.District.Court.Jun.7.2018.pdf
8 changes: 8 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2977,6 +2977,14 @@
"link": false,
"type": "eq"
},
{ "id": "issue11287",
"file": "pdfs/issue11287.pdf",
"md5": "d7d6a7c124fad7b00f79112b71ee09d6",
"rounds": 1,
"link": true,
"lastPage": 1,
"type": "eq"
},
{ "id": "issue4890",
"file": "pdfs/issue4890.pdf",
"md5": "1666feb4cd26318c2bdbea6a175dce87",
Expand Down

0 comments on commit bbd2386

Please sign in to comment.