From e90d19919434b90d79e67aaf199bddd991f8e5d8 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 21 Aug 2007 08:03:26 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20463430=20=E2=80=93=20Gets=20stuck=20while?= =?UTF-8?q?=20"formatting=20message"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2007-08-21 Behdad Esfahbod Bug 463430 – Gets stuck while "formatting message" * pango/opentype/harfbuzz-gpos.c (Lookup_PairPos1), (Lookup_PairPos2), (Lookup_PairPos), (Do_ContextPos): * pango/opentype/harfbuzz-gsub.c (Do_ContextSubst): Change type of intermediate index variable from FT_UShort to FT_ULong as it was overlowing with more than 65536 glyphs. --- src/harfbuzz-gpos.c | 15 ++++++++++----- src/harfbuzz-gsub.c | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/harfbuzz-gpos.c b/src/harfbuzz-gpos.c index 513f3fb5b..6f0476ab4 100644 --- a/src/harfbuzz-gpos.c +++ b/src/harfbuzz-gpos.c @@ -1518,7 +1518,7 @@ static void Free_PairPos( HB_GPOS_SubTable* st, static FT_Error Lookup_PairPos1( GPOS_Instance* gpi, HB_PairPosFormat1* ppf1, HB_Buffer buffer, - FT_UShort first_pos, + FT_ULong first_pos, FT_UShort index, FT_UShort format1, FT_UShort format2 ) @@ -1560,7 +1560,7 @@ static FT_Error Lookup_PairPos1( GPOS_Instance* gpi, static FT_Error Lookup_PairPos2( GPOS_Instance* gpi, HB_PairPosFormat2* ppf2, HB_Buffer buffer, - FT_UShort first_pos, + FT_ULong first_pos, FT_UShort format1, FT_UShort format2 ) { @@ -1600,7 +1600,8 @@ static FT_Error Lookup_PairPos( GPOS_Instance* gpi, int nesting_level ) { FT_Error error; - FT_UShort index, property, first_pos; + FT_UShort index, property; + FT_ULong first_pos; HB_GPOSHeader* gpos = gpi->gpos; HB_PairPos* pp = &st->pair; @@ -1631,8 +1632,12 @@ static FT_Error Lookup_PairPos( GPOS_Instance* gpi, return error; if ( buffer->in_pos == buffer->in_length ) - return HB_Err_Not_Covered; + { + buffer->in_pos = first_pos; + return HB_Err_Not_Covered; + } (buffer->in_pos)++; + } switch ( pp->PosFormat ) @@ -3137,7 +3142,7 @@ static FT_Error Do_ContextPos( GPOS_Instance* gpi, int nesting_level ) { FT_Error error; - FT_UShort i, old_pos; + FT_ULong i, old_pos; i = 0; diff --git a/src/harfbuzz-gsub.c b/src/harfbuzz-gsub.c index 00db6e869..23b87b854 100644 --- a/src/harfbuzz-gsub.c +++ b/src/harfbuzz-gsub.c @@ -1130,7 +1130,7 @@ static FT_Error Do_ContextSubst( HB_GSUBHeader* gsub, int nesting_level ) { FT_Error error; - FT_UShort i, old_pos; + FT_ULong i, old_pos; i = 0;