Font: a little extra null safety for hhea and os2 font data, just to be safe
Followup to 62ab8eb6fc
This commit is contained in:
@@ -578,13 +578,21 @@ namespace lime {
|
|||||||
TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2);
|
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);
|
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
|
||||||
|
|
||||||
int calculatedAscender = hhea->Ascender;
|
int calculatedAscender = 0;
|
||||||
int calculatedDescender = hhea->Descender;
|
int calculatedDescender = 0;
|
||||||
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
|
int calculatedHeight = 0;
|
||||||
|
|
||||||
|
if (hhea) {
|
||||||
|
|
||||||
|
calculatedAscender = hhea->Ascender;
|
||||||
|
calculatedDescender = hhea->Descender;
|
||||||
|
calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (!( calculatedAscender || calculatedDescender ))
|
if (!( calculatedAscender || calculatedDescender ))
|
||||||
{
|
{
|
||||||
if (os2->version != 0xFFFFU)
|
if (os2 && os2->version != 0xFFFFU)
|
||||||
{
|
{
|
||||||
if (os2->sTypoAscender || os2->sTypoDescender)
|
if (os2->sTypoAscender || os2->sTypoDescender)
|
||||||
{
|
{
|
||||||
@@ -597,7 +605,7 @@ namespace lime {
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
calculatedAscender = (FT_Short)os2->usWinAscent;
|
calculatedAscender = (FT_Short)os2->usWinAscent;
|
||||||
calculatedDescender = -(FT_Short)os2->usWinDescent;
|
calculatedDescender = -(FT_Short)os2->usWinDescent;
|
||||||
calculatedHeight = calculatedAscender - calculatedDescender;
|
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_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);
|
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
|
||||||
|
|
||||||
int calculatedAscender = hhea->Ascender;
|
int calculatedAscender = 0;
|
||||||
int calculatedDescender = hhea->Descender;
|
int calculatedDescender = 0;
|
||||||
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
|
|
||||||
|
if (hhea) {
|
||||||
|
|
||||||
|
calculatedAscender = hhea->Ascender;
|
||||||
|
calculatedDescender = hhea->Descender;
|
||||||
|
}
|
||||||
|
|
||||||
if (!( calculatedAscender || calculatedDescender ))
|
if (!( calculatedAscender || calculatedDescender ))
|
||||||
{
|
{
|
||||||
if (os2->version != 0xFFFFU)
|
if (os2 && os2->version != 0xFFFFU)
|
||||||
{
|
{
|
||||||
if (os2->sTypoAscender || os2->sTypoDescender)
|
if (os2->sTypoAscender || os2->sTypoDescender)
|
||||||
{
|
{
|
||||||
|
|
||||||
calculatedAscender = os2->sTypoAscender;
|
calculatedAscender = os2->sTypoAscender;
|
||||||
calculatedDescender = os2->sTypoDescender;
|
calculatedDescender = os2->sTypoDescender;
|
||||||
calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
calculatedAscender = (FT_Short)os2->usWinAscent;
|
calculatedAscender = (FT_Short)os2->usWinAscent;
|
||||||
calculatedDescender = -(FT_Short)os2->usWinDescent;
|
calculatedDescender = -(FT_Short)os2->usWinDescent;
|
||||||
calculatedHeight = calculatedAscender - calculatedDescender;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -866,7 +877,6 @@ namespace lime {
|
|||||||
|
|
||||||
calculatedAscender = ((FT_Face)face)->ascender;
|
calculatedAscender = ((FT_Face)face)->ascender;
|
||||||
calculatedDescender = ((FT_Face)face)->descender;
|
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_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);
|
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
|
||||||
|
|
||||||
int calculatedAscender = hhea->Ascender;
|
int calculatedAscender = 0;
|
||||||
int calculatedDescender = hhea->Descender;
|
int calculatedDescender = 0;
|
||||||
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
|
|
||||||
|
if (hhea) {
|
||||||
|
|
||||||
|
calculatedAscender = hhea->Ascender;
|
||||||
|
calculatedDescender = hhea->Descender;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (!( calculatedAscender || calculatedDescender ))
|
if (!( calculatedAscender || calculatedDescender ))
|
||||||
{
|
{
|
||||||
if (os2->version != 0xFFFFU)
|
if (os2 && os2->version != 0xFFFFU)
|
||||||
{
|
{
|
||||||
if (os2->sTypoAscender || os2->sTypoDescender)
|
if (os2->sTypoAscender || os2->sTypoDescender)
|
||||||
{
|
{
|
||||||
|
|
||||||
calculatedAscender = os2->sTypoAscender;
|
calculatedAscender = os2->sTypoAscender;
|
||||||
calculatedDescender = os2->sTypoDescender;
|
calculatedDescender = os2->sTypoDescender;
|
||||||
calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
calculatedAscender = (FT_Short)os2->usWinAscent;
|
calculatedAscender = (FT_Short)os2->usWinAscent;
|
||||||
calculatedDescender = -(FT_Short)os2->usWinDescent;
|
calculatedDescender = -(FT_Short)os2->usWinDescent;
|
||||||
calculatedHeight = calculatedAscender - calculatedDescender;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -944,7 +958,6 @@ namespace lime {
|
|||||||
|
|
||||||
calculatedAscender = ((FT_Face)face)->ascender;
|
calculatedAscender = ((FT_Face)face)->ascender;
|
||||||
calculatedDescender = ((FT_Face)face)->descender;
|
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_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);
|
TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea);
|
||||||
|
|
||||||
int calculatedAscender = hhea->Ascender;
|
int calculatedAscender = 0;
|
||||||
int calculatedDescender = hhea->Descender;
|
int calculatedDescender = 0;
|
||||||
int calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
|
int calculatedHeight = 0;
|
||||||
|
|
||||||
|
if (hhea) {
|
||||||
|
|
||||||
|
calculatedAscender = hhea->Ascender;
|
||||||
|
calculatedDescender = hhea->Descender;
|
||||||
|
calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (!( calculatedAscender || calculatedDescender ))
|
if (!( calculatedAscender || calculatedDescender ))
|
||||||
{
|
{
|
||||||
if (os2->version != 0xFFFFU)
|
if (os2 && os2->version != 0xFFFFU)
|
||||||
{
|
{
|
||||||
if (os2->sTypoAscender || os2->sTypoDescender)
|
if (os2->sTypoAscender || os2->sTypoDescender)
|
||||||
{
|
{
|
||||||
|
|
||||||
calculatedAscender = os2->sTypoAscender;
|
calculatedAscender = os2->sTypoAscender;
|
||||||
calculatedDescender = os2->sTypoDescender;
|
calculatedDescender = os2->sTypoDescender;
|
||||||
calculatedHeight = calculatedAscender - calculatedDescender +
|
calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap;
|
||||||
os2->sTypoLineGap;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user