* src/pfr/pfrobjs.c (pfr_face_get_kerning): Skip adjustment bytes correctly. Reported as Savannah bug #17843.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
diff --git a/ChangeLog b/ChangeLog
index f93d7f2..1887e73 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-26 David Bustin
+
+ * src/pfr/pfrobjs.c (pfr_face_get_kerning): Skip adjustment bytes
+ correctly. Reported as Savannah bug #17843.
+
2006-09-26 David Turner <david@freetype.org>
* src/autofit/afhints.h (AF_HINTS_DO_HORIZONTAL,
diff --git a/src/pfr/pfrobjs.c b/src/pfr/pfrobjs.c
index b566d73..8d29d5f 100644
--- a/src/pfr/pfrobjs.c
+++ b/src/pfr/pfrobjs.c
@@ -476,13 +476,14 @@
goto Exit;
{
- FT_UInt count = item->pair_count;
- FT_UInt size = item->pair_size;
- FT_UInt power = (FT_UInt)ft_highpow2( (FT_UInt32)count );
- FT_UInt probe = power * size;
- FT_UInt extra = count - power;
- FT_Byte* base = stream->cursor;
- FT_Bool twobytes = FT_BOOL( item->flags & 1 );
+ FT_UInt count = item->pair_count;
+ FT_UInt size = item->pair_size;
+ FT_UInt power = (FT_UInt)ft_highpow2( (FT_UInt32)count );
+ FT_UInt probe = power * size;
+ FT_UInt extra = count - power;
+ FT_Byte* base = stream->cursor;
+ FT_Bool twobytes = FT_BOOL( item->flags & 1 );
+ FT_Bool twobyte_adj = FT_BOOL( item->flags & 2 );
FT_Byte* p;
FT_UInt32 cpair;
@@ -500,7 +501,13 @@
goto Found;
if ( cpair < pair )
+ {
+ if ( twobyte_adj )
+ p += 2;
+ else
+ p++;
base = p;
+ }
}
while ( probe > size )
@@ -533,7 +540,7 @@
Found:
- if ( item->flags & 2 )
+ if ( twobyte_adj )
value = FT_PEEK_SHORT( p );
else
value = p[0];