]> granicus.if.org Git - libass/commitdiff
In ass_font_new, allocate temporary ass_font_t on stack and return the pointer
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>
Thu, 3 May 2007 19:26:43 +0000 (19:26 +0000)
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>
Thu, 3 May 2007 19:26:43 +0000 (19:26 +0000)
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

index 57423d1dd7ebdf320e3b8f9ce4d98fdb5b68a667..7217f4082573c62c06560e45e687df3301a35921 100644 (file)
@@ -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);
 }
 
 /**