diff --git a/src/core/fonts.js b/src/core/fonts.js index 1712e9cdb..0c511f8aa 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3322,15 +3322,21 @@ var Type1Parser = (function Type1ParserClosure() { } function decrypt(data, key, discardNumber) { - var r = key | 0, c1 = 52845, c2 = 22719; - var count = data.length; + if (discardNumber >= data.length) { + return new Uint8Array(0); + } + var r = key | 0, c1 = 52845, c2 = 22719, i, j; + for (i = 0; i < discardNumber; i++) { + r = ((data[i] + r) * c1 + c2) & ((1 << 16) - 1); + } + var count = data.length - discardNumber; var decrypted = new Uint8Array(count); - for (var i = 0; i < count; i++) { + for (i = discardNumber, j = 0; j < count; i++, j++) { var value = data[i]; - decrypted[i] = value ^ (r >> 8); + decrypted[j] = value ^ (r >> 8); r = ((value + r) * c1 + c2) & ((1 << 16) - 1); } - return Array.prototype.slice.call(decrypted, discardNumber); + return decrypted; } function decryptAscii(data, key, discardNumber) {