Commit fa0eb0c95fa954a3097d62c440303c403f466942

David Turner 2005-02-27T21:35:50

* src/sfnt/ttkern.c (tt_face_load_kern): fixing a small bug which returned invalid (random) values for the horizontal kerning

diff --git a/ChangeLog b/ChangeLog
index 5fa7f2e..d62607d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-02-27  David Turner  <david@freetype.org>
+
+  * src/sfnt/ttkern.c (tt_face_load_kern): fixing a small bug which returned
+  invalid (random) values for the horizontal kerning
+
 2005-02-25  David Turner  <david@freetype.org>
 
   * many, many files: several memory optimizations were implemented to
diff --git a/src/sfnt/ttkern.c b/src/sfnt/ttkern.c
index a75d566..f59dc03 100644
--- a/src/sfnt/ttkern.c
+++ b/src/sfnt/ttkern.c
@@ -175,7 +175,6 @@
                        FT_UInt  right_glyph )
   {
     FT_Int    result = 0;
-    FT_Int    value;
     FT_UInt   count, mask = 1;
     FT_Byte*  p       = face->kern_table;
     FT_Byte*  p_limit = p + face->kern_table_size;
@@ -190,6 +189,7 @@
       FT_UInt  version  = FT_NEXT_USHORT(p);
       FT_UInt  length   = FT_NEXT_USHORT(p);
       FT_UInt  coverage = FT_NEXT_USHORT(p);
+      FT_Int   value    = 0;
       
       next = base + length;
       
@@ -205,8 +205,7 @@
           {
             FT_UInt   num_pairs = FT_NEXT_USHORT(p);
             FT_ULong  key0      = TT_KERN_INDEX(left_glyph,right_glyph);
-            FT_Int    value     = 0;
-            
+
             p += 6;
             
             if ( face->kern_order_bits & mask )   /* binary search */
@@ -226,7 +225,7 @@
                 if ( key == key0 )
                 {
                   value = FT_PEEK_SHORT(q);
-                  break;
+                  goto Found;
                 }
                 if ( key < key0 )
                   min = mid+1;
@@ -245,7 +244,7 @@
                 if ( key == key0 )
                 {
                   value = FT_PEEK_SHORT(p);
-                  break;
+                  goto Found;
                 }
                 p += 2;
               }
@@ -261,6 +260,9 @@
           ;
       }
 
+      goto NextTable;
+      
+    Found:
       if ( coverage & 8 ) /* overide or addition */
         result = value;
       else