From 5f1f75076cfda129d6cbf86a634fcadfdfc0c9f6 Mon Sep 17 00:00:00 2001 From: David Turner Date: Wed, 7 Jun 2006 05:11:50 +0000 Subject: [PATCH] Fix memory leak described in Savannah bug #16768 * src/type1/t1afm.c (T1_Read_Metrics): fix memory leak which happened when the metrics file doesn't have kerning pairs. --- ChangeLog | 8 ++++++++ src/type1/t1afm.c | 18 +++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index d22ba176..166eb780 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-06-07 David Turner + + Fix memory leak described in Savannah bug #16768 + + * src/type1/t1afm.c (T1_Read_Metrics): fix memory leak + which happened when the metrics file doesn't have kerning + pairs. + 2006-06-06 David Turner Fix memory leak described in Savannah bug #16759. diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c index 379b3306..f4d00d64 100644 --- a/src/type1/t1afm.c +++ b/src/type1/t1afm.c @@ -73,7 +73,7 @@ #undef KERN_INDEX -#define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)g1 << 16 ) | g2 ) +#define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)(g1) << 16 ) | (g2) ) /* compare two kerning pairs */ @@ -233,14 +233,9 @@ T1_Font t1_font = &( (T1_Face)t1_face )->type1; - if ( FT_NEW( fi ) ) - return error; - - if ( FT_FRAME_ENTER( stream->size ) ) - { - FT_FREE( fi ); - return error; - } + if ( FT_NEW( fi ) || + FT_FRAME_ENTER( stream->size ) ) + goto Exit; fi->FontBBox = t1_font->font_bbox; fi->Ascender = t1_font->font_bbox.yMax; @@ -292,11 +287,16 @@ { t1_face->face_flags |= FT_FACE_FLAG_KERNING; ( (T1_Face)t1_face )->afm_data = fi; + fi = NULL; } } FT_FRAME_EXIT(); + Exit: + if ( fi != NULL ) + T1_Done_Metrics( memory, fi ); + return error; }