From 9ad50521b1c58dc21b0226a8668222c34b22d91a Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 30 Jul 2019 16:48:27 +0200 Subject: [PATCH] Add a work-around, in `glyphlist.js`, for bad PDF generators which use a non-standard `/f_f` string in the `Encoding` dictionary when referring to the ff ligature (issue 11016) This patch will not incur any (measurable) overhead, since the glyphlist is already quite long and one more entry won't really matter, which is important given that this sort of PDF corruption ought to be very rare. Furthermore, this patch purposely does *not* add a bunch of similarly modified ligature names on pure speculation. Any similar additions, for other ligatures, should only be made if there's real-world examples of PDF files where that's actually necessary. --- src/core/glyphlist.js | 1 + test/pdfs/.gitignore | 1 + test/pdfs/issue11016_reduced.pdf | Bin 0 -> 5558 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 9 insertions(+) create mode 100644 test/pdfs/issue11016_reduced.pdf diff --git a/src/core/glyphlist.js b/src/core/glyphlist.js index 0317ddbbd..b6669a0ba 100644 --- a/src/core/glyphlist.js +++ b/src/core/glyphlist.js @@ -1826,6 +1826,7 @@ var getGlyphsUnicode = getLookupTableFactory(function (t) { t['feicoptic'] = 0x03E5; t['female'] = 0x2640; t['ff'] = 0xFB00; + t['f_f'] = 0xFB00; // Fixes issue 11016. t['ffi'] = 0xFB03; t['ffl'] = 0xFB04; t['fi'] = 0xFB01; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index b081eeb73..ebcd5489c 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -79,6 +79,7 @@ !issue10529.pdf !issue10542_reduced.pdf !issue10665_reduced.pdf +!issue11016_reduced.pdf !bad-PageLabels.pdf !decodeACSuccessive.pdf !filled-background.pdf diff --git a/test/pdfs/issue11016_reduced.pdf b/test/pdfs/issue11016_reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1e219e3461f10a2cd8114569bae736ea7d153c4b GIT binary patch literal 5558 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 3f0b97d4c..612975d54 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -39,6 +39,13 @@ "lastPage": 1, "type": "text" }, + { "id": "issue11016", + "file": "pdfs/issue11016_reduced.pdf", + "md5": "b75578bd052d2e6acdcc85b615eab6b1", + "rounds": 1, + "link": false, + "type": "text" + }, { "id": "issue1293", "file": "pdfs/issue1293r.pdf", "md5": "4a098f5051f34fab036f5bbe88f8deef",