Remove glyph id's outside the range of valid glyphs.
OTS does not like invalid glyph ids in a camp table.
This commit is contained in:
parent
e93512f1eb
commit
87762afec4
@ -2798,11 +2798,15 @@ var Font = (function FontClosure() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRanges(glyphs) {
|
function getRanges(glyphs, numGlyphs) {
|
||||||
// Array.sort() sorts by characters, not numerically, so convert to an
|
// Array.sort() sorts by characters, not numerically, so convert to an
|
||||||
// array of characters.
|
// array of characters.
|
||||||
var codes = [];
|
var codes = [];
|
||||||
for (var charCode in glyphs) {
|
for (var charCode in glyphs) {
|
||||||
|
// Remove an invalid glyph ID mappings to make OTS happy.
|
||||||
|
if (glyphs[charCode] >= numGlyphs) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] });
|
codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] });
|
||||||
}
|
}
|
||||||
codes.sort(function fontGetRangesSort(a, b) {
|
codes.sort(function fontGetRangesSort(a, b) {
|
||||||
@ -2831,8 +2835,8 @@ var Font = (function FontClosure() {
|
|||||||
return ranges;
|
return ranges;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createCmapTable(glyphs) {
|
function createCmapTable(glyphs, numGlyphs) {
|
||||||
var ranges = getRanges(glyphs);
|
var ranges = getRanges(glyphs, numGlyphs);
|
||||||
var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1;
|
var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1;
|
||||||
var cmap = '\x00\x00' + // version
|
var cmap = '\x00\x00' + // version
|
||||||
string16(numTables) + // numTables
|
string16(numTables) + // numTables
|
||||||
@ -4335,7 +4339,7 @@ var Font = (function FontClosure() {
|
|||||||
this.toFontChar = newMapping.toFontChar;
|
this.toFontChar = newMapping.toFontChar;
|
||||||
tables.cmap = {
|
tables.cmap = {
|
||||||
tag: 'cmap',
|
tag: 'cmap',
|
||||||
data: createCmapTable(newMapping.charCodeToGlyphId)
|
data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphs)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) {
|
if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) {
|
||||||
@ -4473,7 +4477,8 @@ var Font = (function FontClosure() {
|
|||||||
builder.addTable('OS/2', createOS2Table(properties,
|
builder.addTable('OS/2', createOS2Table(properties,
|
||||||
newMapping.charCodeToGlyphId));
|
newMapping.charCodeToGlyphId));
|
||||||
// Character to glyphs mapping
|
// Character to glyphs mapping
|
||||||
builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId));
|
builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId,
|
||||||
|
numGlyphs));
|
||||||
// Font header
|
// Font header
|
||||||
builder.addTable('head',
|
builder.addTable('head',
|
||||||
'\x00\x01\x00\x00' + // Version number
|
'\x00\x01\x00\x00' + // Version number
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -22,6 +22,7 @@
|
|||||||
!bug1020858.pdf
|
!bug1020858.pdf
|
||||||
!bug1050040.pdf
|
!bug1050040.pdf
|
||||||
!bug1200096.pdf
|
!bug1200096.pdf
|
||||||
|
!issue5564_reduced.pdf
|
||||||
!canvas.pdf
|
!canvas.pdf
|
||||||
!complex_ttf_font.pdf
|
!complex_ttf_font.pdf
|
||||||
!extgstate.pdf
|
!extgstate.pdf
|
||||||
|
BIN
test/pdfs/issue5564_reduced.pdf
Normal file
BIN
test/pdfs/issue5564_reduced.pdf
Normal file
Binary file not shown.
@ -40,6 +40,16 @@
|
|||||||
"type": "load",
|
"type": "load",
|
||||||
"about": "PDF with undefined stream length."
|
"about": "PDF with undefined stream length."
|
||||||
},
|
},
|
||||||
|
{ "id": "issue5564_reduced",
|
||||||
|
"file": "pdfs/issue5564_reduced.pdf",
|
||||||
|
"md5": "097853614b56fc10bfbf7e56daa0c66b",
|
||||||
|
"rounds": 1,
|
||||||
|
"link": false,
|
||||||
|
"firstPage": 1,
|
||||||
|
"lastPage": 1,
|
||||||
|
"type": "eq",
|
||||||
|
"about": "Causes cmap to be created with invalid glyph ids."
|
||||||
|
},
|
||||||
{ "id": "bug946506",
|
{ "id": "bug946506",
|
||||||
"file": "pdfs/bug946506.pdf",
|
"file": "pdfs/bug946506.pdf",
|
||||||
"md5": "c28911b5c31bdc337c2ce404c5971cfc",
|
"md5": "c28911b5c31bdc337c2ce404c5971cfc",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user