Check if glyph are stored outside the glyf table
This commit is contained in:
parent
e0e6209baf
commit
8f3b198c23
10
src/fonts.js
10
src/fonts.js
@ -1636,12 +1636,20 @@ var Font = (function FontClosure() {
|
|||||||
var locaData = loca.data;
|
var locaData = loca.data;
|
||||||
// removing the invalid glyphs
|
// removing the invalid glyphs
|
||||||
var oldGlyfData = glyf.data;
|
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 startOffset = itemDecode(locaData, 0);
|
||||||
var writeOffset = 0;
|
var writeOffset = 0;
|
||||||
itemEncode(locaData, 0, writeOffset);
|
itemEncode(locaData, 0, writeOffset);
|
||||||
for (var i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
|
for (var i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
|
||||||
var endOffset = itemDecode(locaData, j);
|
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,
|
var newLength = sanitizeGlyph(oldGlyfData, startOffset, endOffset,
|
||||||
newGlyfData, writeOffset);
|
newGlyfData, writeOffset);
|
||||||
writeOffset += newLength;
|
writeOffset += newLength;
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -20,6 +20,7 @@
|
|||||||
!scan-bad.pdf
|
!scan-bad.pdf
|
||||||
!freeculture.pdf
|
!freeculture.pdf
|
||||||
!issue918.pdf
|
!issue918.pdf
|
||||||
|
!issue1249.pdf
|
||||||
!smaskdim.pdf
|
!smaskdim.pdf
|
||||||
!type4psfunc.pdf
|
!type4psfunc.pdf
|
||||||
!S2.pdf
|
!S2.pdf
|
||||||
|
BIN
test/pdfs/issue1249.pdf
Normal file
BIN
test/pdfs/issue1249.pdf
Normal file
Binary file not shown.
@ -417,6 +417,12 @@
|
|||||||
"link": true,
|
"link": true,
|
||||||
"type": "eq"
|
"type": "eq"
|
||||||
},
|
},
|
||||||
|
{ "id": "issue1249-load",
|
||||||
|
"file": "pdfs/issue1249.pdf",
|
||||||
|
"md5": "4f81339fa09422a7db980f34ea963609",
|
||||||
|
"rounds": 1,
|
||||||
|
"type": "load"
|
||||||
|
},
|
||||||
{ "id": "liveprogramming",
|
{ "id": "liveprogramming",
|
||||||
"file": "pdfs/liveprogramming.pdf",
|
"file": "pdfs/liveprogramming.pdf",
|
||||||
"md5": "7bd4dad1188232ef597d36fd72c33e52",
|
"md5": "7bd4dad1188232ef597d36fd72c33e52",
|
||||||
|
Loading…
Reference in New Issue
Block a user