From 6a8c59130129b06eea4b53c359732118f46b05bf Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 25 Mar 2020 13:57:51 +0100 Subject: [PATCH 1/3] Improve detection of binary/ASCII `eexec` encrypted Type1 font programs in `Type1Parser` (issue 11740) The PDF document, in the referenced issue, actually contains ASCII-encoded Type1 data which we currently *incorrectly* identify as binary. According to the specification, see https://www-cdf.fnal.gov/offline/PostScript/T1_SPEC.PDF#[{%22num%22%3A203%2C%22gen%22%3A0}%2C{%22name%22%3A%22XYZ%22}%2C87%2C452%2Cnull], the current checks are insufficient to decide between binary/ASCII encoded Type1 font programs. --- src/core/type1_parser.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index 76f5c3d2f..2b8bb659c 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -457,10 +457,14 @@ var Type1Parser = (function Type1ParserClosure() { if (encrypted) { var data = stream.getBytes(); var isBinary = !( - isHexDigit(data[0]) && + (isHexDigit(data[0]) || isWhiteSpace(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && - isHexDigit(data[3]) + isHexDigit(data[3]) && + isHexDigit(data[4]) && + isHexDigit(data[5]) && + isHexDigit(data[6]) && + isHexDigit(data[7]) ); stream = new Stream( isBinary From 938d519192bb806ac4ad1e1c07273ce579f5941f Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 25 Mar 2020 14:06:01 +0100 Subject: [PATCH 2/3] Create the glyph mapping correctly for composite Type1, i.e. CIDFontType0, fonts (issue 11740) This updates `Type1Font.getGlyphMapping` with a code-path "borrowed" from `CFFFont.getGlyphMapping`. --- src/core/fonts.js | 16 ++++++++++++++++ test/pdfs/.gitignore | 1 + test/pdfs/issue11740_reduced.pdf | Bin 0 -> 22335 bytes test/test_manifest.json | 6 ++++++ 4 files changed, 23 insertions(+) create mode 100644 test/pdfs/issue11740_reduced.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index add8fd973..39a74e2d0 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3635,6 +3635,22 @@ var Type1Font = (function Type1FontClosure() { getGlyphMapping: function Type1Font_getGlyphMapping(properties) { var charstrings = this.charstrings; + + if (properties.composite) { + const charCodeToGlyphId = Object.create(null); + // Map CIDs directly to GIDs. + for ( + let glyphId = 0, charstringsLen = charstrings.length; + glyphId < charstringsLen; + glyphId++ + ) { + const charCode = properties.cMap.charCodeOf(glyphId); + // Add 1 because glyph 0 is duplicated. + charCodeToGlyphId[charCode] = glyphId + 1; + } + return charCodeToGlyphId; + } + var glyphNames = [".notdef"], glyphId; for (glyphId = 0; glyphId < charstrings.length; glyphId++) { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 648de4c34..a6ef9da6a 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -206,6 +206,7 @@ !bug1011159.pdf !issue5734.pdf !issue4875.pdf +!issue11740_reduced.pdf !issue4881.pdf !issue5994.pdf !issue6151.pdf diff --git a/test/pdfs/issue11740_reduced.pdf b/test/pdfs/issue11740_reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..069bf0514548f54958cd24a4e83c1d56dfe06f0a GIT binary patch literal 22335 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 9429ca6f9..73f94005e 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -904,6 +904,12 @@ "link": false, "type": "eq" }, + { "id": "issue11740", + "file": "pdfs/issue11740_reduced.pdf", + "md5": "f3f2957f171af52229c6e749e8a5572b", + "rounds": 1, + "type": "eq" + }, { "id": "issue10491", "file": "pdfs/issue10491.pdf", "md5": "0759ec46739b13bb0b66170a18d33d4f", From 8770ca30144b0f33d94d2f3f754cff25cf339b7c Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 26 Mar 2020 12:49:20 +0100 Subject: [PATCH 3/3] Make the `decryptAscii` helper function, in `src/core/type1_parser.js`, slightly more efficient By slicing the Uint8Array directly, rather than using the prototype and a `call` invocation, the runtime of `decryptAscii` is decreased slightly (~30% based on quick logging). The `decryptAscii` function is still less efficient than `decrypt`, however ASCII encoded Type1 font programs are sufficiently rare that it probably doesn't matter much (we've only seen *two* examples, issue 4630 and 11740). --- src/core/type1_parser.js | 2 +- src/shared/compatibility.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index 2b8bb659c..60c6b8506 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -437,7 +437,7 @@ var Type1Parser = (function Type1ParserClosure() { r = ((value + r) * c1 + c2) & ((1 << 16) - 1); } } - return Array.prototype.slice.call(decrypted, discardNumber, j); + return decrypted.slice(discardNumber, j); } function isSpecial(c) { diff --git a/src/shared/compatibility.js b/src/shared/compatibility.js index 93fee9bd1..7cd219fba 100644 --- a/src/shared/compatibility.js +++ b/src/shared/compatibility.js @@ -224,6 +224,15 @@ if ( Number.isInteger = require("core-js/es/number/is-integer.js"); })(); + // Provides support for TypedArray.prototype.slice in legacy browsers. + // Support: IE + (function checkTypedArraySlice() { + if (Uint8Array.prototype.slice) { + return; + } + require("core-js/es/typed-array/slice"); + })(); + // Support: IE, Safari<11, Chrome<63 (function checkPromise() { if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("IMAGE_DECODERS")) {