poppler/CairoFontEngine.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
New commits: commit 8ca43bebf36f8da085917f28230e25524de4f4f4 Author: Jason Crain <[email protected]> Date: Tue Mar 24 02:51:47 2015 -0500 cairo: Fix memory leak in CairoFreeTypeFont::create - Free embedded font data in _ft_done_face when the cairo font is destroyed. - Free embedded font data if _ft_new_face finds it's a duplicate of an already open font. - Free embedded font data and codeToGID array if font creation fails. Bug #89952 diff --git a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc index a5a3023..4ffbf2e 100644 --- a/poppler/CairoFontEngine.cc +++ b/poppler/CairoFontEngine.cc @@ -256,12 +256,16 @@ _ft_done_face (void *closure) else _ft_open_faces = data->next; + if (data->fd != -1) { #if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) - munmap ((char*)data->bytes, data->size); + munmap ((char*)data->bytes, data->size); #else - munmap (data->bytes, data->size); + munmap (data->bytes, data->size); #endif - close (data->fd); + close (data->fd); + } else { + gfree (data->bytes); + } FT_Done_Face (data->face); gfree (data); @@ -318,6 +322,8 @@ _ft_new_face (FT_Library lib, munmap (tmpl.bytes, tmpl.size); #endif close (tmpl.fd); + } else { + gfree (tmpl.bytes); } *face_out = l->face; *font_face_out = cairo_font_face_reference (l->font_face); @@ -533,8 +539,6 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, } if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { - gfree(codeToGID); - codeToGID = NULL; error(errSyntaxError, -1, "could not create cid face\n"); goto err2; } @@ -555,6 +559,8 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, err2: /* hmm? */ delete fontLoc; + gfree (codeToGID); + gfree (font_data); fprintf (stderr, "some font thing failed\n"); return NULL; } _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
