From 34bc30a5f0b3a25d0a68a42bebcb065ab01a517a Mon Sep 17 00:00:00 2001 From: suzuki toshiya Date: Fri, 3 Jul 2009 18:01:35 +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 ea96cbcf8..8eb8bb109 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2009-07-03 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-03 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; } }