From 97cd12657daf11fea4aee85c94716e3663f94fc8 Mon Sep 17 00:00:00 2001 From: Ewald Hew Date: Thu, 28 Sep 2017 08:29:33 +0200 Subject: [PATCH] * src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak. Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489 --- ChangeLog | 8 ++++++++ src/cid/cidgload.c | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index c1a9b328a..9d0bbbb72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2017-09-28 Ewald Hew + + * src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak. + + Reported as + + https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489 + 2017-09-28 Alexei Podtelezhnikov Bitmap metrics presetting [1/2]. diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c index e8a2be3ea..f0b498874 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -335,6 +335,7 @@ PSAux_Service psaux = (PSAux_Service)face->psaux; FT_Matrix font_matrix; FT_Vector font_offset; + FT_Bool must_finish_decoder = FALSE; if ( glyph_index >= (FT_UInt)face->root.num_glyphs ) @@ -375,6 +376,8 @@ /* TODO: initialize decoder.len_buildchar and decoder.buildchar */ /* if we ever support CID-keyed multiple master fonts */ + must_finish_decoder = TRUE; + /* set up the decoder */ decoder.builder.no_recurse = FT_BOOL( ( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) ); @@ -393,6 +396,8 @@ /* save new glyph tables */ psaux->t1_decoder_funcs->done( &decoder ); + must_finish_decoder = FALSE; + /* now set the metrics -- this is rather simple, as */ /* the left side bearing is the xMin, and the top side */ /* bearing the yMax */ @@ -501,6 +506,10 @@ } Exit: + + if ( must_finish_decoder ) + psaux->t1_decoder_funcs->done( &decoder ); + return error; }