From 2485f11829db012c6e939d53fe4634304ebb1db0 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 24 Jul 2014 14:59:21 +0200 Subject: [PATCH] Fix loading of PDF files with invalid or missing Type3 characters (issue 5039) --- src/core/evaluator.js | 17 ++++++++++------- src/display/canvas.js | 7 ++++++- test/pdfs/.gitignore | 1 + test/pdfs/issue5039.pdf | Bin 0 -> 30475 bytes test/test_manifest.json | 7 +++++++ 5 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 test/pdfs/issue5039.pdf diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 2579ddfdb..279c47659 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -1760,14 +1760,17 @@ var TranslatedFont = (function TranslatedFontClosure() { var glyphStream = charProcs[key]; var operatorList = new OperatorList(); return evaluator.getOperatorList(glyphStream, fontResources, - operatorList). - then(function () { - charProcOperatorList[key] = operatorList.getIR(); + operatorList).then(function () { + charProcOperatorList[key] = operatorList.getIR(); - // Add the dependencies to the parent operator list so they are - // resolved before sub operator list is executed synchronously. - parentOperatorList.addDependencies(operatorList.dependencies); - }); + // Add the dependencies to the parent operator list so they are + // resolved before sub operator list is executed synchronously. + parentOperatorList.addDependencies(operatorList.dependencies); + }, function (reason) { + warn('Type3 font resource \"' + key + '\" is not available'); + var operatorList = new OperatorList(); + charProcOperatorList[key] = operatorList.getIR(); + }); }.bind(this, charProcKeys[i])); } this.type3Loaded = loadCharProcsPromise.then(function () { diff --git a/src/display/canvas.js b/src/display/canvas.js index fab668715..9972a8a5e 100644 --- a/src/display/canvas.js +++ b/src/display/canvas.js @@ -1489,11 +1489,16 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { continue; } + var operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + warn('Type3 character \"' + glyph.operatorListId + + '\" is not available'); + continue; + } this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform.apply(ctx, fontMatrix); - var operatorList = font.charProcOperatorList[glyph.operatorListId]; this.executeOperatorList(operatorList); this.restore(); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index ad859818d..51bc02bc8 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -52,6 +52,7 @@ !issue1002.pdf !issue925.pdf !issue4668.pdf +!issue5039.pdf !gradientfill.pdf !bug903856.pdf !bug850854.pdf diff --git a/test/pdfs/issue5039.pdf b/test/pdfs/issue5039.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dfe29fe9d2963e09dea8f0dc06effeee44d16674 GIT binary patch literal 30475 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 wJ$+mQ=Pb7SJj0ze5O7gXwa0RR91 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index cc2ce05b1..313a4ab4c 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1024,6 +1024,13 @@ "link": true, "type": "eq" }, + { "id": "issue5039", + "file": "pdfs/issue5039.pdf", + "md5": "5c131f458ee6b65cc096ccaf0474ee3a", + "link": false, + "rounds": 1, + "type": "eq" + }, { "id": "issue1257", "file": "pdfs/issue1257.pdf", "md5": "9111533826bc21ed774e8e01603a2f54",