From a0b118ea048a5c1898657f76fae9776227f49891 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 29 Aug 2011 12:06:29 +0200 Subject: Fix drawing leak on cache hit This was introduced by the new cache code. --- libass/ass_render.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libass/ass_render.c b/libass/ass_render.c index 2a9b147..d719e09 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -554,7 +554,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv, // Try to get mask from cache memset(&key, 0, sizeof(key)); key.type = BITMAP_CLIP; - key.u.clip.text = strdup(drawing->text); + key.u.clip.text = drawing->text; val = ass_cache_get(render_priv->cache.bitmap_cache, &key); if (val) { @@ -593,6 +593,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv, // Add to cache memset(&v, 0, sizeof(v)); + key.u.clip.text = strdup(drawing->text); v.bm = clip_bm; ass_cache_put(render_priv->cache.bitmap_cache, &key, &v); } @@ -1066,7 +1067,7 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key, key->outline.y = double_to_d16(info->border_y); key->border_style = priv->state.style->BorderStyle; key->hash = info->drawing->hash; - key->text = strdup(info->drawing->text); + key->text = info->drawing->text; key->pbo = info->drawing->pbo; key->scale = info->drawing->scale; } else { @@ -1121,7 +1122,7 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info) v.advance.y = drawing->advance.y; v.asc = drawing->asc; v.desc = drawing->desc; - ass_drawing_free(drawing); + key.u.drawing.text = strdup(drawing->text); } else { ass_face_set_size(info->font->faces[info->face_index], info->font_size); @@ -1189,6 +1190,8 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info) } info->asc = val->asc; info->desc = val->desc; + + ass_drawing_free(info->drawing); } /** -- cgit v1.2.3