diff options
author | Leandro Santiago <leandrosansilva@gmail.com> | 2014-07-02 09:39:50 -0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-07-03 15:45:15 +0200 |
commit | 4582e1162a0b57bd0787da390555b8f96f8b393b (patch) | |
tree | a229eae46fd0d442ad439af4d2caf560102a4b88 | |
parent | a3c479fc49659e86abd11e92e2f2ddd8923b0559 (diff) | |
download | ffmpeg-4582e1162a0b57bd0787da390555b8f96f8b393b.tar.gz |
avfilter/vf_drawtext: fix resource leak
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavfilter/vf_drawtext.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index adc587e154..202b2fad6d 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -262,6 +262,7 @@ struct ft_error typedef struct Glyph { FT_Glyph *glyph; + FT_Glyph border_glyph; uint32_t code; FT_Bitmap bitmap; ///< array holding bitmaps of font FT_Bitmap border_bitmap; ///< array holding bitmaps of font border @@ -306,13 +307,13 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code) goto error; } if (s->borderw) { - FT_Glyph border_glyph = *glyph->glyph; - if (FT_Glyph_StrokeBorder(&border_glyph, s->stroker, 0, 0) || - FT_Glyph_To_Bitmap(&border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) { + glyph->border_glyph = *glyph->glyph; + if (FT_Glyph_StrokeBorder(&glyph->border_glyph, s->stroker, 0, 0) || + FT_Glyph_To_Bitmap(&glyph->border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) { ret = AVERROR_EXTERNAL; goto error; } - bitmapglyph = (FT_BitmapGlyph) border_glyph; + bitmapglyph = (FT_BitmapGlyph) glyph->border_glyph; glyph->border_bitmap = bitmapglyph->bitmap; } if (FT_Glyph_To_Bitmap(glyph->glyph, FT_RENDER_MODE_NORMAL, 0, 1)) { @@ -343,6 +344,7 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code) error: if (glyph) av_freep(&glyph->glyph); + av_freep(&glyph); av_freep(&node); return ret; @@ -584,6 +586,7 @@ static int glyph_enu_free(void *opaque, void *elem) Glyph *glyph = elem; FT_Done_Glyph(*glyph->glyph); + FT_Done_Glyph(glyph->border_glyph); av_freep(&glyph->glyph); av_free(elem); return 0; |