return;
}
- if (pOS2->usWinAscent + pOS2->usWinDescent == 0)
+ if ((FT_Short)pOS2->usWinAscent + (FT_Short)pOS2->usWinDescent == 0)
{
Ascent = pHori->Ascender;
Descent = -pHori->Descender;
}
else
{
- Ascent = pOS2->usWinAscent;
- Descent = pOS2->usWinDescent;
+ Ascent = (FT_Short)pOS2->usWinAscent;
+ Descent = (FT_Short)pOS2->usWinDescent;
}
- if (FontGDI->Magic != FONTGDI_MAGIC)
- {
- IntRequestFontSize(NULL, FontGDI, 0, 0);
- }
TM->tmAscent = FontGDI->tmAscent;
TM->tmDescent = FontGDI->tmDescent;
TM->tmHeight = TM->tmAscent + TM->tmDescent;
}
Ntm->ntmSizeEM = Otm->otmEMSquare;
- Ntm->ntmCellHeight = pOS2->usWinAscent + pOS2->usWinDescent;
+ Ntm->ntmCellHeight = (FT_Short)pOS2->usWinAscent + (FT_Short)pOS2->usWinDescent;
Ntm->ntmAvgWidth = 0;
ExFreePoolWithTag(Otm, GDITAG_TEXT);
return FT_Request_Size(face, &req);
}
- /* See also: https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fsselection */
+ /*
+ * NOTE: We cast TT_OS2.usWinAscent and TT_OS2.usWinDescent to signed FT_Short.
+ * Why? See: https://docs.microsoft.com/en-us/typography/opentype/spec/os2#uswindescent
+ *
+ * > usWinDescent is "usually" a positive value ...
+ *
+ * We can read it as "not always". See CORE-14994.
+ * See also: https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fsselection
+ */
#define FM_SEL_USE_TYPO_METRICS 0x80
if (lfHeight > 0)
{
/* case (A): lfHeight is positive */
- Sum = pOS2->usWinAscent + pOS2->usWinDescent;
+ Sum = (FT_Short)pOS2->usWinAscent + (FT_Short)pOS2->usWinDescent;
if (Sum == 0 || (pOS2->fsSelection & FM_SEL_USE_TYPO_METRICS))
{
Ascent = pHori->Ascender;
}
else
{
- Ascent = pOS2->usWinAscent;
- Descent = pOS2->usWinDescent;
+ Ascent = (FT_Short)pOS2->usWinAscent;
+ Descent = (FT_Short)pOS2->usWinDescent;
}
FontGDI->tmAscent = FT_MulDiv(lfHeight, Ascent, Sum);
}
else
{
- FontGDI->tmAscent = FT_MulDiv(-lfHeight, pOS2->usWinAscent, face->units_per_EM);
- FontGDI->tmDescent = FT_MulDiv(-lfHeight, pOS2->usWinDescent, face->units_per_EM);
+ FontGDI->tmAscent = FT_MulDiv(-lfHeight, (FT_Short)pOS2->usWinAscent, face->units_per_EM);
+ FontGDI->tmDescent = FT_MulDiv(-lfHeight, (FT_Short)pOS2->usWinDescent, face->units_per_EM);
}
FontGDI->tmHeight = FontGDI->tmAscent + FontGDI->tmDescent;
FontGDI->tmInternalLeading = FontGDI->tmHeight + lfHeight;