[Libreoffice-commits] core.git: vcl/source
Caolán McNamara
caolanm at redhat.com
Fri Jun 6 02:01:02 PDT 2014
vcl/source/fontsubset/sft.cxx | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
New commits:
commit 623b4e3e10ed8afe8807f2599e03f748c0d392d2
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Jun 6 10:00:21 2014 +0100
improve this sanity check
Change-Id: If202723412b2bf7acf7dcd2709886f89df9d7940
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 8b00a30..2fdd6ea 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -1226,16 +1226,19 @@ static void FindCmap(TrueTypeFont *ttf)
sal_uInt32 ThreeSix = 0; /* MS Johab */
for (i = 0; i < ncmaps; i++) {
- sal_uInt32 offset;
- sal_uInt16 pID, eID;
-
/* sanity check, cmap entry must lie within table */
- if( i*8+4 > table_size )
+ sal_uInt32 nLargestFixedOffsetPos = 8 + i * 8;
+ sal_uInt32 nMinSize = nLargestFixedOffsetPos + sizeof(sal_uInt32);
+ if (nMinSize > table_size)
+ {
+ SAL_WARN( "vcl.fonts", "Font " << OUString::createFromAscii(ttf->fname) << " claimed to have "
+ << ncmaps << " cmaps, but only space for " << i);
break;
+ }
- pID = GetUInt16(table, 4 + i * 8, 1);
- eID = GetUInt16(table, 6 + i * 8, 1);
- offset = GetUInt32(table, 8 + i * 8, 1);
+ sal_uInt16 pID = GetUInt16(table, 4 + i * 8, 1);
+ sal_uInt16 eID = GetUInt16(table, 6 + i * 8, 1);
+ sal_uInt32 offset = GetUInt32(table, nLargestFixedOffsetPos, 1);
/* sanity check, cmap must lie within file */
if( (table - ttf->ptr) + offset > (sal_uInt32)ttf->fsize )
More information about the Libreoffice-commits
mailing list