Ensure that TilingPattern
s have valid (non-zero) /BBox arrays (issue 8330)
Fixes 8330.
This commit is contained in:
parent
9342054502
commit
e589834f13
@ -480,30 +480,40 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||||||
stateManager.state.clone());
|
stateManager.state.clone());
|
||||||
},
|
},
|
||||||
|
|
||||||
handleTilingType:
|
handleTilingType(fn, args, resources, pattern, patternDict, operatorList,
|
||||||
function PartialEvaluator_handleTilingType(fn, args, resources,
|
task) {
|
||||||
pattern, patternDict,
|
|
||||||
operatorList, task) {
|
|
||||||
// Create an IR of the pattern code.
|
// Create an IR of the pattern code.
|
||||||
var tilingOpList = new OperatorList();
|
let tilingOpList = new OperatorList();
|
||||||
// Merge the available resources, to prevent issues when the patternDict
|
// Merge the available resources, to prevent issues when the patternDict
|
||||||
// is missing some /Resources entries (fixes issue6541.pdf).
|
// is missing some /Resources entries (fixes issue6541.pdf).
|
||||||
var resourcesArray = [patternDict.get('Resources'), resources];
|
let resourcesArray = [patternDict.get('Resources'), resources];
|
||||||
var patternResources = Dict.merge(this.xref, resourcesArray);
|
let patternResources = Dict.merge(this.xref, resourcesArray);
|
||||||
|
|
||||||
return this.getOperatorList({
|
return this.getOperatorList({
|
||||||
stream: pattern,
|
stream: pattern,
|
||||||
task,
|
task,
|
||||||
resources: patternResources,
|
resources: patternResources,
|
||||||
operatorList: tilingOpList,
|
operatorList: tilingOpList,
|
||||||
}).then(function () {
|
}).then(function() {
|
||||||
// Add the dependencies to the parent operator list so they are
|
return getTilingPatternIR({
|
||||||
// resolved before sub operator list is executed synchronously.
|
|
||||||
operatorList.addDependencies(tilingOpList.dependencies);
|
|
||||||
operatorList.addOp(fn, getTilingPatternIR({
|
|
||||||
fnArray: tilingOpList.fnArray,
|
fnArray: tilingOpList.fnArray,
|
||||||
argsArray: tilingOpList.argsArray,
|
argsArray: tilingOpList.argsArray,
|
||||||
}, patternDict, args));
|
}, patternDict, args);
|
||||||
|
}).then(function(tilingPatternIR) {
|
||||||
|
// Add the dependencies to the parent operator list so they are
|
||||||
|
// resolved before the sub operator list is executed synchronously.
|
||||||
|
operatorList.addDependencies(tilingOpList.dependencies);
|
||||||
|
operatorList.addOp(fn, tilingPatternIR);
|
||||||
|
}, (reason) => {
|
||||||
|
if (this.options.ignoreErrors) {
|
||||||
|
// Error(s) in the TilingPattern -- sending unsupported feature
|
||||||
|
// notification and allow rendering to continue.
|
||||||
|
this.handler.send('UnsupportedFeature',
|
||||||
|
{ featureId: UNSUPPORTED_FEATURES.unknown, });
|
||||||
|
warn(`handleTilingType - ignoring pattern: "${reason}".`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw reason;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -795,12 +795,18 @@ Shadings.Dummy = (function DummyClosure() {
|
|||||||
})();
|
})();
|
||||||
|
|
||||||
function getTilingPatternIR(operatorList, dict, args) {
|
function getTilingPatternIR(operatorList, dict, args) {
|
||||||
var matrix = dict.getArray('Matrix');
|
let matrix = dict.getArray('Matrix');
|
||||||
var bbox = dict.getArray('BBox');
|
let bbox = Util.normalizeRect(dict.getArray('BBox'));
|
||||||
var xstep = dict.get('XStep');
|
let xstep = dict.get('XStep');
|
||||||
var ystep = dict.get('YStep');
|
let ystep = dict.get('YStep');
|
||||||
var paintType = dict.get('PaintType');
|
let paintType = dict.get('PaintType');
|
||||||
var tilingType = dict.get('TilingType');
|
let tilingType = dict.get('TilingType');
|
||||||
|
|
||||||
|
// Ensure that the pattern has a non-zero width and height, to prevent errors
|
||||||
|
// in `pattern_helper.js` (fixes issue8330.pdf).
|
||||||
|
if ((bbox[2] - bbox[0]) === 0 || (bbox[3] - bbox[1]) === 0) {
|
||||||
|
throw new Error(`getTilingPatternIR - invalid /BBox array: [${bbox}].`);
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep,
|
'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep,
|
||||||
|
@ -304,7 +304,7 @@ var TilingPattern = (function TilingPatternClosure() {
|
|||||||
function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
|
function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
|
||||||
this.operatorList = IR[2];
|
this.operatorList = IR[2];
|
||||||
this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
|
this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
|
||||||
this.bbox = Util.normalizeRect(IR[4]);
|
this.bbox = IR[4];
|
||||||
this.xstep = IR[5];
|
this.xstep = IR[5];
|
||||||
this.ystep = IR[6];
|
this.ystep = IR[6];
|
||||||
this.paintType = IR[7];
|
this.paintType = IR[7];
|
||||||
|
1
test/pdfs/issue8330.pdf.link
Normal file
1
test/pdfs/issue8330.pdf.link
Normal file
@ -0,0 +1 @@
|
|||||||
|
https://github.com/mozilla/pdf.js/files/954710/FailingPDF.pdf
|
@ -1269,6 +1269,14 @@
|
|||||||
"rounds": 1,
|
"rounds": 1,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
},
|
},
|
||||||
|
{ "id": "issue8330",
|
||||||
|
"file": "pdfs/issue8330.pdf",
|
||||||
|
"md5": "9010093d07dd62d3b49378fd48cf45f9",
|
||||||
|
"rounds": 1,
|
||||||
|
"lastPage": 1,
|
||||||
|
"link": true,
|
||||||
|
"type": "eq"
|
||||||
|
},
|
||||||
{ "id": "issue4573",
|
{ "id": "issue4573",
|
||||||
"file": "pdfs/issue4573.pdf",
|
"file": "pdfs/issue4573.pdf",
|
||||||
"md5": "34b0c4fdee19e57033275b766c5f57a3",
|
"md5": "34b0c4fdee19e57033275b766c5f57a3",
|
||||||
|
Loading…
Reference in New Issue
Block a user