From 4e7a0af9e288f78b3e335eec895bf1f7768bdde9 Mon Sep 17 00:00:00 2001 From: eugeni Date: Thu, 3 May 2007 19:26:43 +0000 Subject: [PATCH] In ass_font_new, allocate temporary ass_font_t on stack and return the pointer to cache-owned copy. This fixes leaked ass_font_t struct. Without this, font pointers obtained from ass_font_new() and ass_font_cache_find() were different, and bitmaps rendered with the first one could not be located in the cache later. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23230 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libass/ass_font.c | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/libass/ass_font.c b/libass/ass_font.c index 57423d1..7217f40 100644 --- a/libass/ass_font.c +++ b/libass/ass_font.c @@ -83,12 +83,13 @@ ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_ int index; FT_Face face; int error; - ass_font_t* font; + ass_font_t* fontp; + ass_font_t font; int mem_idx; - font = ass_font_cache_find(desc); - if (font) - return font; + fontp = ass_font_cache_find(desc); + if (fontp) + return fontp; path = fontconfig_select(fc_priv, desc->family, desc->bold, desc->italic, &index); @@ -110,26 +111,23 @@ ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_ charmap_magic(face); - font = calloc(1, sizeof(ass_font_t)); - font->ftlibrary = ftlibrary; - font->faces[0] = face; - font->n_faces = 1; - font->desc.family = strdup(desc->family); - font->desc.bold = desc->bold; - font->desc.italic = desc->italic; + font.ftlibrary = ftlibrary; + font.faces[0] = face; + font.n_faces = 1; + font.desc.family = strdup(desc->family); + font.desc.bold = desc->bold; + font.desc.italic = desc->italic; - font->m.xx = font->m.yy = (FT_Fixed)0x10000L; - font->m.xy = font->m.yy = 0; - font->v.x = font->v.y = 0; - font->size = 0; + font.m.xx = font.m.yy = (FT_Fixed)0x10000L; + font.m.xy = font.m.yy = 0; + font.v.x = font.v.y = 0; + font.size = 0; #ifdef HAVE_FONTCONFIG - font->charset = FcCharSetCreate(); + font.charset = FcCharSetCreate(); #endif - ass_font_cache_add(font); - - return font; + return ass_font_cache_add(&font); } /** -- 2.40.0