Compute the loca table endOffset, of the "first" glyph, correctly (issue 14618)

When there are *multiple* empty glyphs at the start of the data, ensure that the "first" glyph gets a correct `endOffset` to avoid skipping it during parsing in the `sanitizeGlyph` function.
This commit is contained in:
Jonas Jenwald 2022-03-03 14:14:22 +01:00
parent 234aa9a50e
commit 1a7921dbf0
4 changed files with 21 additions and 0 deletions

View File

@ -1980,6 +1980,20 @@ class Font {
locaEntries.sort((a, b) => {
return a.index - b.index;
});
// Calculate the endOffset of the "first" glyph correctly when there are
// *multiple* empty ones at the start of the data (fixes issue14618.pdf).
for (i = 0; i < numGlyphs; i++) {
const { offset, endOffset } = locaEntries[i];
if (offset !== 0 || endOffset !== 0) {
break;
}
const nextOffset = locaEntries[i + 1].offset;
if (nextOffset === 0) {
continue;
}
locaEntries[i].endOffset = nextOffset;
break;
}
const missingGlyphs = Object.create(null);
let writeOffset = 0;

View File

@ -321,6 +321,7 @@
!jbig2_symbol_offset.pdf
!gradientfill.pdf
!bug903856.pdf
!issue14618.pdf
!bug850854.pdf
!issue12810.pdf
!bug866395.pdf

BIN
test/pdfs/issue14618.pdf Normal file

Binary file not shown.

View File

@ -351,6 +351,12 @@
"rounds": 1,
"type": "load"
},
{ "id": "issue14618",
"file": "pdfs/issue14618.pdf",
"md5": "8a4a5aac59519228019aaffdfbd56f17",
"rounds": 1,
"type": "eq"
},
{ "id": "intelisa-eq",
"file": "pdfs/intelisa.pdf",
"md5": "24643ebe348a568cfe6a532055c71493",