diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-02-07 16:51:32 +0000 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2018-06-01 14:43:05 +0200 |
commit | f0e086f0e9646ddfcdc30d44c03b5287351464da (patch) | |
tree | 48fb1156bfcc941c2ac921b05597bd003b23979f | |
parent | 23d53ae3a51dde89a8d40b05841232527480a4bc (diff) |
what matters is the availability of the last element, not the first
Change-Id: I23d3abdbe62b735d66261fb337613da88cc4206b
Reviewed-on: https://gerrit.libreoffice.org/49380
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | vcl/source/fontsubset/sft.cxx | 6 |
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 ) |