|
|
|
@ -1621,12 +1621,20 @@ var Font = (function FontClosure() {
@@ -1621,12 +1621,20 @@ var Font = (function FontClosure() {
|
|
|
|
|
var locaData = loca.data; |
|
|
|
|
// removing the invalid glyphs
|
|
|
|
|
var oldGlyfData = glyf.data; |
|
|
|
|
var newGlyfData = new Uint8Array(oldGlyfData.length); |
|
|
|
|
var oldGlyfDataLength = oldGlyfData.length; |
|
|
|
|
var newGlyfData = new Uint8Array(oldGlyfDataLength); |
|
|
|
|
var startOffset = itemDecode(locaData, 0); |
|
|
|
|
var writeOffset = 0; |
|
|
|
|
itemEncode(locaData, 0, writeOffset); |
|
|
|
|
for (var i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { |
|
|
|
|
var endOffset = itemDecode(locaData, j); |
|
|
|
|
if (endOffset > oldGlyfDataLength) { |
|
|
|
|
// glyph end offset points outside glyf data, rejecting the glyph
|
|
|
|
|
itemEncode(locaData, j, writeOffset); |
|
|
|
|
startOffset = endOffset; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var newLength = sanitizeGlyph(oldGlyfData, startOffset, endOffset, |
|
|
|
|
newGlyfData, writeOffset); |
|
|
|
|
writeOffset += newLength; |
|
|
|
|