Copy fixes from harfbuzz stable branch. Includes a leak fix, a kerning

2007-04-03  Behdad Esfahbod  <behdad@gnome.org>

        * pango/opentype/harfbuzz-gdef.c (_HB_GDEF_Check_Property):
        * pango/opentype/harfbuzz-gpos.c (HB_Done_GPOS_Table),
        (Lookup_PairPos):
        * pango/opentype/harfbuzz-open.c (Get_Class1):
        Copy fixes from harfbuzz stable branch.  Includes a leak fix,
        a kerning fix, and an array out-of-bound access fix.
This commit is contained in:
Behdad Esfahbod 2007-04-03 22:45:29 +00:00 committed by Behdad Esfahbod
parent 999a6f0575
commit 7341a11691
3 changed files with 11 additions and 1 deletions

View File

@ -1217,6 +1217,8 @@ FT_Error _HB_GDEF_Check_Property( HB_GDEFHeader* gdef,
*property != desired_attachment_class ) *property != desired_attachment_class )
return HB_Err_Not_Covered; return HB_Err_Not_Covered;
} }
} else {
*property = 0;
} }
return FT_Err_Ok; return FT_Err_Ok;

View File

@ -193,6 +193,8 @@ FT_Error HB_Done_GPOS_Table( HB_GPOSHeader* gpos )
_HB_OPEN_Free_FeatureList( &gpos->FeatureList, memory ); _HB_OPEN_Free_FeatureList( &gpos->FeatureList, memory );
_HB_OPEN_Free_ScriptList( &gpos->ScriptList, memory ); _HB_OPEN_Free_ScriptList( &gpos->ScriptList, memory );
FREE( gpos );
return FT_Err_Ok; return FT_Err_Ok;
} }
@ -1650,6 +1652,12 @@ static FT_Error Lookup_PairPos( GPOS_Instance* gpi,
return HB_Err_Invalid_GPOS_SubTable_Format; return HB_Err_Invalid_GPOS_SubTable_Format;
} }
/* if we don't have coverage for the second glyph don't skip it for
further lookups but reset in_pos back to the first_glyph and let
the caller in Do_String_Lookup increment in_pos */
if ( error == HB_Err_Not_Covered )
buffer->in_pos = first_pos;
/* adjusting the `next' glyph */ /* adjusting the `next' glyph */
if ( pp->ValueFormat2 ) if ( pp->ValueFormat2 )

View File

@ -1191,7 +1191,7 @@ static FT_Error Get_Class1( HB_ClassDefFormat1* cdf1,
*index = 0; *index = 0;
if ( glyphID >= cdf1->StartGlyph && if ( glyphID >= cdf1->StartGlyph &&
glyphID <= cdf1->StartGlyph + cdf1->GlyphCount ) glyphID < cdf1->StartGlyph + cdf1->GlyphCount )
{ {
*class = cva[glyphID - cdf1->StartGlyph]; *class = cva[glyphID - cdf1->StartGlyph];
return FT_Err_Ok; return FT_Err_Ok;