Bug 463430 – Gets stuck while "formatting message"
authorBehdad Esfahbod <behdad@gnome.org>
Tue, 21 Aug 2007 08:03:26 +0000 (08:03 +0000)
committerBehdad Esfahbod <behdad@src.gnome.org>
Tue, 21 Aug 2007 08:03:26 +0000 (08:03 +0000)
2007-08-21  Behdad Esfahbod  <behdad@gnome.org>

        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
src/harfbuzz-gsub.c

index 513f3fb..6f0476a 100644 (file)
@@ -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;
index 00db6e8..23b87b8 100644 (file)
@@ -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;