From 9206eba291017e9917d5e17e94ea6d4fcbca9f0f Mon Sep 17 00:00:00 2001 From: suzuki toshiya Date: Sat, 1 Aug 2009 00:32:17 +0900 Subject: [PATCH] truetype: Truncate the deltas of composite glyph at 16-bit values. --- ChangeLog | 13 +++++++++++++ src/truetype/ttgload.c | 7 +++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3de1bba27..b91d0294a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2009-07-31 suzuki toshiya + + truetype: Truncate the deltas of composite glyph at 16-bit values. + + * src/truetype/ttgload.c (load_truetype_glyph): + Insert cast from FT_Long (deltas[i].{x,y}) to + FT_Int16 in the summation of deltas[] for composite + glyphs. Because deltas[i] is typed as FT_Pos, + its component x, y are typed as FT_Long, but + their sources are always FT_Int16 when they are + loaded by ft_var_readpackeddeltas(). However, + the limitation about the summed deltas is unclear. + 2009-07-31 suzuki toshiya truetype: Truncate the instructions upto 16-bit per a glyph. diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index 5d48e8fa3..b0f6810f0 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -1400,8 +1400,11 @@ { if ( subglyph->flags & ARGS_ARE_XY_VALUES ) { - subglyph->arg1 += deltas[i].x; - subglyph->arg2 += deltas[i].y; + /* XXX: overflow check for subglyph->{arg1,arg2}. */ + /* deltas[i].{x,y} must be within signed 16-bit, */ + /* but the restriction of summed delta is not clear */ + subglyph->arg1 += (FT_Int16)deltas[i].x; + subglyph->arg2 += (FT_Int16)deltas[i].y; } }