diff --git a/src/core/fonts.js b/src/core/fonts.js index 25dfca078..ec9f8422e 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -5628,12 +5628,17 @@ var CFFParser = (function CFFParserClosure() { }, parseHeader: function CFFParser_parseHeader() { var bytes = this.bytes; + var bytesLength = bytes.length; var offset = 0; - while (bytes[offset] != 1) + // Prevent an infinite loop, by checking that the offset is within the + // bounds of the bytes array. Necessary in empty, or invalid, font files. + while (offset < bytesLength && bytes[offset] !== 1) { ++offset; - - if (offset !== 0) { + } + if (offset >= bytesLength) { + error('Invalid CFF header'); + } else if (offset !== 0) { info('cff data is shifted'); bytes = bytes.subarray(offset); this.bytes = bytes;