guess at possible bug in #192

it may be that we try reading a corrupted os/2 table, hard to tell without test document.
This commit is contained in:
Eliot Jones
2020-07-26 14:36:35 +01:00
parent 142c871c47
commit dc55fd8011

View File

@@ -35,7 +35,7 @@
var selectionFlags = data.ReadUnsignedShort(); var selectionFlags = data.ReadUnsignedShort();
var firstCharacterIndex = data.ReadUnsignedShort(); var firstCharacterIndex = data.ReadUnsignedShort();
var lastCharacterIndex = data.ReadUnsignedShort(); var lastCharacterIndex = data.ReadUnsignedShort();
var unicodeCharRange = new[] {ulCharRange1, ulCharRange2, ulCharRange3, ulCharRange4}; var unicodeCharRange = new[] { ulCharRange1, ulCharRange2, ulCharRange3, ulCharRange4 };
var vendorId = Encoding.ASCII.GetString(vendorIdBytes); var vendorId = Encoding.ASCII.GetString(vendorIdBytes);
@@ -67,11 +67,42 @@
lastCharacterIndex); lastCharacterIndex);
} }
var sTypoAscender = data.ReadSignedShort(); short sTypoAscender;
var sTypoDescender = data.ReadSignedShort(); short sTypoDescender;
var sTypoLineGap = data.ReadSignedShort(); short sTypoLineGap;
var usWinAscent = data.ReadUnsignedShort(); ushort usWinAscent;
var usWinDescent = data.ReadUnsignedShort(); ushort usWinDescent;
try
{
sTypoAscender = data.ReadSignedShort();
sTypoDescender = data.ReadSignedShort();
sTypoLineGap = data.ReadSignedShort();
usWinAscent = data.ReadUnsignedShort();
usWinDescent = data.ReadUnsignedShort();
}
catch
{
// Font may be invalid. Try falling back to shorter version...
return new Os2Table(header, version, xAvgCharWidth,
weightClass, widthClass, typeFlags, ySubscriptXSize,
ySubscriptYSize,
ySubscriptXOffset,
ySubscriptYOffset,
ySuperscriptXSize,
ySuperscriptYSize,
ySuperscriptXOffset,
ySuperscriptYOffset,
yStrikeoutSize,
yStrikeoutPosition,
familyClass,
panose,
unicodeCharRange,
vendorId,
selectionFlags,
firstCharacterIndex,
lastCharacterIndex);
}
if (version == 0) if (version == 0)
{ {