Commit 4582e116 authored by Leandro Santiago's avatar Leandro Santiago Committed by Michael Niedermayer

avfilter/vf_drawtext: fix resource leak

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent a3c479fc
...@@ -262,6 +262,7 @@ struct ft_error ...@@ -262,6 +262,7 @@ struct ft_error
typedef struct Glyph { typedef struct Glyph {
FT_Glyph *glyph; FT_Glyph *glyph;
FT_Glyph border_glyph;
uint32_t code; uint32_t code;
FT_Bitmap bitmap; ///< array holding bitmaps of font FT_Bitmap bitmap; ///< array holding bitmaps of font
FT_Bitmap border_bitmap; ///< array holding bitmaps of font border 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) ...@@ -306,13 +307,13 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code)
goto error; goto error;
} }
if (s->borderw) { if (s->borderw) {
FT_Glyph border_glyph = *glyph->glyph; glyph->border_glyph = *glyph->glyph;
if (FT_Glyph_StrokeBorder(&border_glyph, s->stroker, 0, 0) || if (FT_Glyph_StrokeBorder(&glyph->border_glyph, s->stroker, 0, 0) ||
FT_Glyph_To_Bitmap(&border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) { FT_Glyph_To_Bitmap(&glyph->border_glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
ret = AVERROR_EXTERNAL; ret = AVERROR_EXTERNAL;
goto error; goto error;
} }
bitmapglyph = (FT_BitmapGlyph) border_glyph; bitmapglyph = (FT_BitmapGlyph) glyph->border_glyph;
glyph->border_bitmap = bitmapglyph->bitmap; glyph->border_bitmap = bitmapglyph->bitmap;
} }
if (FT_Glyph_To_Bitmap(glyph->glyph, FT_RENDER_MODE_NORMAL, 0, 1)) { 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) ...@@ -343,6 +344,7 @@ static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, uint32_t code)
error: error:
if (glyph) if (glyph)
av_freep(&glyph->glyph); av_freep(&glyph->glyph);
av_freep(&glyph); av_freep(&glyph);
av_freep(&node); av_freep(&node);
return ret; return ret;
...@@ -584,6 +586,7 @@ static int glyph_enu_free(void *opaque, void *elem) ...@@ -584,6 +586,7 @@ static int glyph_enu_free(void *opaque, void *elem)
Glyph *glyph = elem; Glyph *glyph = elem;
FT_Done_Glyph(*glyph->glyph); FT_Done_Glyph(*glyph->glyph);
FT_Done_Glyph(glyph->border_glyph);
av_freep(&glyph->glyph); av_freep(&glyph->glyph);
av_free(elem); av_free(elem);
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment