diff options
author | suzuki toshiya <sssa@flavor1.ipc.hiroshima-u.ac.jp> | 2010-07-01 18:39:04 +0900 |
---|---|---|
committer | suzuki toshiya <sssa@flavor1.ipc.hiroshima-u.ac.jp> | 2010-07-01 18:39:04 +0900 |
commit | 5ef20c8c1d4de12a84b50ba497c2a358c90ec44b (patch) | |
tree | 0dcf573a33c3c113758c74fdfce57d1c9c92e539 | |
parent | f29f741efbba0a5ce2f16464f648fb8d026ed4c8 (diff) | |
download | freetype2-5ef20c8c1d4de12a84b50ba497c2a358c90ec44b.tar.gz |
Initial fix for Savannah bug #30306.
* src/base/ftobjs.c (Mac_Read_POST_Resource): Check `rlen'
the length of fragment declared in the POST fragment header
and prevent an underflow in length calculation. Some fonts
set the length to zero in spite of the exist of following
16bit `type'. Reported by Robert Swiecki.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | src/base/ftobjs.c | 11 |
2 files changed, 20 insertions, 1 deletions
@@ -1,5 +1,15 @@ 2010-07-01 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> + Initial fix for Savannah bug #30306. + + * src/base/ftobjs.c (Mac_Read_POST_Resource): Check `rlen' + the length of fragment declared in the POST fragment header + and prevent an underflow in length calculation. Some fonts + set the length to zero in spite of the exist of following + 16bit `type'. Reported by Robert Swiecki. + +2010-07-01 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> + Additional fix for Savannah bug #30248 and #30249. * src/base/ftobjs.c (Mac_Read_POST_Resource): Check the buffer diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 9217b8767..7c2662f6e 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -1547,7 +1547,16 @@ goto Exit; if ( FT_READ_USHORT( flags ) ) goto Exit; - rlen -= 2; /* the flags are part of the resource */ + FT_TRACE3(( "POST fragment[%d]: offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n", + i, offsets[i], rlen, flags )); + + /* the flags are part of the resource, so rlen >= 2. */ + /* but some fonts declare rlen = 0 for empty fragment */ + if ( rlen > 2 ) + rlen -= 2; + else + rlen = 0; + if ( ( flags >> 8 ) == type ) len += rlen; else |