summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/source/fontsubset/sft.cxx6
1 files changed, 4 insertions, 2 deletions
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 3378b35344e8..dfe66eb5d58c 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -2553,7 +2553,8 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
info->symbolEncoded = (ttf->cmapType == CMAP_MS_Symbol);
const sal_uInt8* table = getTable(ttf, O_OS2);
- if (table) {
+ sal_uInt32 table_size = getTableSize(ttf, O_OS2);
+ if (table && table_size >= 42) {
info->weight = GetUInt16(table, 4, 1);
info->width = GetUInt16(table, 6, 1);
@@ -2561,12 +2562,13 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
* Microsoft old (78 bytes long) and Microsoft new (86 bytes long,)
* Apple's documentation recommends looking at the table length.
*/
- if (getTableSize(ttf, O_OS2) > 68) {
+ if (table_size >= 78) {
info->typoAscender = XUnits(UPEm,GetInt16(table, 68, 1));
info->typoDescender = XUnits(UPEm, GetInt16(table, 70, 1));
info->typoLineGap = XUnits(UPEm, GetInt16(table, 72, 1));
info->winAscent = XUnits(UPEm, GetUInt16(table, 74, 1));
info->winDescent = XUnits(UPEm, GetUInt16(table, 76, 1));
+
/* sanity check; some fonts treat winDescent as signed
* violating the standard */
if( info->winDescent > 5*UPEm )