From bdd58ab1d2ce06a70318c65f048a01dc5c2cc42c Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 27 Jun 2016 13:51:11 +0200 Subject: [PATCH] Ignore .notdef in the `differences` array when building a fallback `toUnicode` map in `PartialEvaluator_buildToUnicode` (issue 5256) Fixes 5256. --- src/core/evaluator.js | 12 +++++++++--- test/pdfs/.gitignore | 1 + test/pdfs/issue5256.pdf | Bin 0 -> 6136 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 test/pdfs/issue5256.pdf diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 3a97ebbbe..209a58152 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -1750,7 +1750,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // the differences array only contains adobe standard or symbol set names, // in pratice it seems better to always try to create a toUnicode // map based of the default encoding. - var toUnicode, charcode; + var toUnicode, charcode, glyphName; if (!properties.composite /* is simple font */) { toUnicode = []; var encoding = properties.defaultEncoding.slice(); @@ -1758,12 +1758,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // Merge in the differences array. var differences = properties.differences; for (charcode in differences) { - encoding[charcode] = differences[charcode]; + glyphName = differences[charcode]; + if (glyphName === '.notdef') { + // Skip .notdef to prevent rendering errors, e.g. boxes appearing + // where there should be spaces (fixes issue5256.pdf). + continue; + } + encoding[charcode] = glyphName; } var glyphsUnicodeMap = getGlyphsUnicode(); for (charcode in encoding) { // a) Map the character code to a character name. - var glyphName = encoding[charcode]; + glyphName = encoding[charcode]; // b) Look up the character name in the Adobe Glyph List (see the // Bibliography) to obtain the corresponding Unicode value. if (glyphName === '') { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index d0b08ac30..18459a896 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -13,6 +13,7 @@ !issue3214.pdf !issue4665.pdf !issue4684.pdf +!issue5256.pdf !issue5801.pdf !issue5946.pdf !issue5972.pdf diff --git a/test/pdfs/issue5256.pdf b/test/pdfs/issue5256.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f6d3cf249ce2bf15c8b4e72d6097340fc0a7888c GIT binary patch literal 6136 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