diff --git a/src/core/fonts.js b/src/core/fonts.js index 241e50daf..2580b18ee 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3642,6 +3642,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/src/core/type1_parser.js b/src/core/type1_parser.js index 76f5c3d2f..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) { @@ -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 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")) { 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 000000000..069bf0514 Binary files /dev/null and b/test/pdfs/issue11740_reduced.pdf differ 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",