Browse Source

Prevent infinite loop in CFFParser_parseHeader

Jonas Jenwald 11 years ago
parent
commit
5f021b067c
  1. 11
      src/core/fonts.js

11
src/core/fonts.js

@ -5628,12 +5628,17 @@ var CFFParser = (function CFFParserClosure() {
}, },
parseHeader: function CFFParser_parseHeader() { parseHeader: function CFFParser_parseHeader() {
var bytes = this.bytes; var bytes = this.bytes;
var bytesLength = bytes.length;
var offset = 0; 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; ++offset;
}
if (offset !== 0) { if (offset >= bytesLength) {
error('Invalid CFF header');
} else if (offset !== 0) {
info('cff data is shifted'); info('cff data is shifted');
bytes = bytes.subarray(offset); bytes = bytes.subarray(offset);
this.bytes = bytes; this.bytes = bytes;

Loading…
Cancel
Save