From: Grigori Goronzy Date: Sat, 27 Jun 2009 13:20:28 +0000 (+0200) Subject: Fix memory leak in render_overlap X-Git-Tag: 0.9.7~87 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b4a7365b172bb0b5ee093329a7acdf6bce1cb8d;p=libass Fix memory leak in render_overlap render_overlap allocated memory for its hashmap key and values on the heap, relying on the cache cleanup to free them. However, these pointers are not directly inserted into the cache, but memcpy()'ed in hashmap_insert, leading to a pretty bad memory leak. Allocate the key and value on the stack instead to fix this problem. --- diff --git a/libass/ass_render.c b/libass/ass_render.c index 6662e51..451c1d7 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -465,7 +465,7 @@ render_overlap(ass_renderer_t *render_priv, ass_image_t **last_tail, char m; composite_hash_key_t hk; composite_hash_val_t *hv; - composite_hash_key_t *nhk; + composite_hash_val_t chv; int ax = (*last_tail)->dst_x; int ay = (*last_tail)->dst_y; int aw = (*last_tail)->w; @@ -536,12 +536,9 @@ render_overlap(ass_renderer_t *render_priv, ass_image_t **last_tail, } // Insert bitmaps into the cache - nhk = calloc(1, sizeof(*nhk)); - memcpy(nhk, &hk, sizeof(*nhk)); - hv = calloc(1, sizeof(*hv)); - hv->a = (*last_tail)->bitmap; - hv->b = (*tail)->bitmap; - cache_add_composite(render_priv->cache.composite_cache, nhk, hv); + chv.a = (*last_tail)->bitmap; + chv.b = (*tail)->bitmap; + cache_add_composite(render_priv->cache.composite_cache, &hk, &chv); } /**