From e20df4a167995e46d0900651be1c30f134638666 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Wed, 27 Sep 2006 06:29:21 +0000 Subject: [PATCH] * src/pfr/pfrobjs.c (pfr_face_get_kerning): Skip adjustment bytes correctly. Reported as Savannah bug #17843. --- ChangeLog | 5 +++++ src/pfr/pfrobjs.c | 23 +++++++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index f93d7f236..1887e7328 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 * src/autofit/afhints.h (AF_HINTS_DO_HORIZONTAL, diff --git a/src/pfr/pfrobjs.c b/src/pfr/pfrobjs.c index b566d73ad..8d29d5f30 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];