Font: a little extra null safety for hhea and os2 font data, just to be safe

Followup to 62ab8eb6fc
This commit is contained in:
Josh Tynjala
2024-12-13 14:46:58 -08:00
parent 0db3c7c095
commit 9c4fa35361

View File

@@ -578,13 +578,21 @@ namespace lime {
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
int calculatedAscender = hhea->Ascender;
int calculatedDescender = hhea->Descender;
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
int calculatedAscender = 0;
int calculatedDescender = 0;
int calculatedHeight = 0;
if (hhea) {
calculatedAscender = hhea->Ascender;
calculatedDescender = hhea->Descender;
calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
}
if (!( calculatedAscender || calculatedDescender ))
{
if (os2->version != 0xFFFFU)
if (os2 && os2->version != 0xFFFFU)
{
if (os2->sTypoAscender || os2->sTypoDescender)
{
@@ -597,7 +605,7 @@ namespace lime {
else
{
calculatedAscender = (FT_Short)os2->usWinAscent;
calculatedAscender = (FT_Short)os2->usWinAscent;
calculatedDescender = -(FT_Short)os2->usWinDescent;
calculatedHeight = calculatedAscender - calculatedDescender;
@@ -835,28 +843,31 @@ namespace lime {
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
int calculatedAscender = hhea->Ascender;
int calculatedDescender = hhea->Descender;
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
int calculatedAscender = 0;
int calculatedDescender = 0;
if (hhea) {
calculatedAscender = hhea->Ascender;
calculatedDescender = hhea->Descender;
}
if (!( calculatedAscender || calculatedDescender ))
{
if (os2->version != 0xFFFFU)
if (os2 && os2->version != 0xFFFFU)
{
if (os2->sTypoAscender || os2->sTypoDescender)
{
calculatedAscender = os2->sTypoAscender;
calculatedDescender = os2->sTypoDescender;
calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap;
}
else
{
calculatedAscender = (FT_Short)os2->usWinAscent;
calculatedAscender = (FT_Short)os2->usWinAscent;
calculatedDescender = -(FT_Short)os2->usWinDescent;
calculatedHeight = calculatedAscender - calculatedDescender;
}
}
@@ -866,7 +877,6 @@ namespace lime {
calculatedAscender = ((FT_Face)face)->ascender;
calculatedDescender = ((FT_Face)face)->descender;
calculatedHeight = ((FT_Face)face)->height;
}
@@ -913,28 +923,32 @@ namespace lime {
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
int calculatedAscender = hhea->Ascender;
int calculatedDescender = hhea->Descender;
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
int calculatedAscender = 0;
int calculatedDescender = 0;
if (hhea) {
calculatedAscender = hhea->Ascender;
calculatedDescender = hhea->Descender;
}
if (!( calculatedAscender || calculatedDescender ))
{
if (os2->version != 0xFFFFU)
if (os2 && os2->version != 0xFFFFU)
{
if (os2->sTypoAscender || os2->sTypoDescender)
{
calculatedAscender = os2->sTypoAscender;
calculatedDescender = os2->sTypoDescender;
calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap;
}
else
{
calculatedAscender = (FT_Short)os2->usWinAscent;
calculatedAscender = (FT_Short)os2->usWinAscent;
calculatedDescender = -(FT_Short)os2->usWinDescent;
calculatedHeight = calculatedAscender - calculatedDescender;
}
}
@@ -944,7 +958,6 @@ namespace lime {
calculatedAscender = ((FT_Face)face)->ascender;
calculatedDescender = ((FT_Face)face)->descender;
calculatedHeight = ((FT_Face)face)->height;
}
@@ -1170,21 +1183,28 @@ namespace lime {
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
int calculatedAscender = hhea->Ascender;
int calculatedDescender = hhea->Descender;
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
int calculatedAscender = 0;
int calculatedDescender = 0;
int calculatedHeight = 0;
if (hhea) {
calculatedAscender = hhea->Ascender;
calculatedDescender = hhea->Descender;
calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
}
if (!( calculatedAscender || calculatedDescender ))
{
if (os2->version != 0xFFFFU)
if (os2 && os2->version != 0xFFFFU)
{
if (os2->sTypoAscender || os2->sTypoDescender)
{
calculatedAscender = os2->sTypoAscender;
calculatedDescender = os2->sTypoDescender;
calculatedHeight = calculatedAscender - calculatedDescender +
os2->sTypoLineGap;
calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap;
}
else