From af22dc9b0cbeb3d6927adb7032996699630c27f1 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 18 Sep 2019 09:44:18 +0200 Subject: [PATCH] For Type1 fonts, replace missing font dictionary /Widths entries with ones from the font data (issue 11150) Hopefully this patch makes sense, and in order to reduce the regression risk the implementation ensures that only completely missing widths are being replaced. --- src/core/fonts.js | 2 +- src/core/type1_parser.js | 12 +++++++++++- test/pdfs/.gitignore | 1 + test/pdfs/issue11150_reduced.pdf | Bin 0 -> 32378 bytes test/test_manifest.json | 7 +++++++ test/unit/type1_parser_spec.js | 2 +- 6 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 test/pdfs/issue11150_reduced.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index c519dd75d..04eab4c27 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3200,7 +3200,7 @@ var Type1Font = (function Type1FontClosure() { var eexecBlock = getEexecBlock(file, eexecBlockLength); var eexecBlockParser = new Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED); - var data = eexecBlockParser.extractFontProgram(); + var data = eexecBlockParser.extractFontProgram(properties); for (var info in data.properties) { properties[info] = data.properties[info]; } diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index 0a54c4038..319375653 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -520,7 +520,7 @@ var Type1Parser = (function Type1ParserClosure() { * Returns an object containing a Subrs array and a CharStrings * array extracted from and eexec encrypted block of data */ - extractFontProgram: function Type1Parser_extractFontProgram() { + extractFontProgram: function Type1Parser_extractFontProgram(properties) { var stream = this.stream; var subrs = [], charstrings = []; @@ -646,6 +646,16 @@ var Type1Parser = (function Type1ParserClosure() { lsb: charString.lsb, seac: charString.seac, }); + + // Attempt to replace missing widths, from the font dictionary /Widths + // entry, with ones from the font data (fixes issue11150_reduced.pdf). + if (properties.builtInEncoding) { + const index = properties.builtInEncoding.indexOf(glyph); + if (index > -1 && properties.widths[index] === undefined && + index >= properties.firstChar && index <= properties.lastChar) { + properties.widths[index] = charString.width; + } + } } return program; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 6c76b3302..02eaef340 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -82,6 +82,7 @@ !issue10665_reduced.pdf !issue11016_reduced.pdf !issue11045.pdf +!issue11150_reduced.pdf !bad-PageLabels.pdf !decodeACSuccessive.pdf !filled-background.pdf diff --git a/test/pdfs/issue11150_reduced.pdf b/test/pdfs/issue11150_reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cab585e7f4101a6126c531a622823d92357f8600 GIT binary patch literal 32378 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index fc3a95c21..a939822c1 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -53,6 +53,13 @@ "link": false, "type": "text" }, + { "id": "issue11150", + "file": "pdfs/issue11150_reduced.pdf", + "md5": "8b86381089a9ec28723791245a9adfa6", + "rounds": 1, + "link": false, + "type": "eq" + }, { "id": "issue1293", "file": "pdfs/issue1293r.pdf", "md5": "4a098f5051f34fab036f5bbe88f8deef", diff --git a/test/unit/type1_parser_spec.js b/test/unit/type1_parser_spec.js index b031376e0..c718e607a 100644 --- a/test/unit/type1_parser_spec.js +++ b/test/unit/type1_parser_spec.js @@ -90,7 +90,7 @@ describe('Type1Parser', function() { '/.notdef 1 RD x ND\n' + 'end'); var parser = new Type1Parser(stream, false, SEAC_ANALYSIS_ENABLED); - var program = parser.extractFontProgram(); + var program = parser.extractFontProgram({}); expect(program.charstrings.length).toEqual(1); expect(program.properties.privateData.ExpansionFactor).toEqual(99); });