This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch release/8.0 in repository ffmpeg.
commit 4e5bdc1068d51b4ee5062feea0384c3517cc71da Author: Michael Niedermayer <[email protected]> AuthorDate: Sun May 17 15:14:35 2026 +0200 Commit: Michael Niedermayer <[email protected]> CommitDate: Sun Jun 14 04:59:06 2026 +0200 avfilter/vf_drawtext: plug error-path leaks in measure_text/draw_text Signed-off-by: Michael Niedermayer <[email protected]> (cherry picked from commit 47c503c6a9f50cd00b64d0a0a6a04ddda1bc7039) Signed-off-by: Michael Niedermayer <[email protected]> --- libavfilter/vf_drawtext.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index b129c45a94..bcf7bcebb8 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -1561,6 +1561,15 @@ continue_on_failed2: done: av_free(textdup); + if (ret < 0) { + if (s->lines) { + for (int l = 0; l < s->line_count; ++l) + hb_destroy(&s->lines[l].hb_data); + } + av_freep(&s->lines); + av_freep(&s->tab_clusters); + s->line_count = 0; + } return ret; } @@ -1751,7 +1760,7 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame) ret = load_glyph(ctx, &glyph, hb->glyph_info[t].codepoint, shift_x64, shift_y64); if (ret != 0) { - return ret; + goto fail; } g_info->code = hb->glyph_info[t].codepoint; g_info->x = (x64 + true_x) >> 6; @@ -1813,23 +1822,25 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame) if (s->shadowx || s->shadowy) { if ((ret = draw_glyphs(s, frame, &shadowcolor, &metrics, s->shadowx, s->shadowy, s->borderw)) < 0) { - return ret; + goto fail; } } if (s->borderw) { if ((ret = draw_glyphs(s, frame, &bordercolor, &metrics, 0, 0, s->borderw)) < 0) { - return ret; + goto fail; } } if ((ret = draw_glyphs(s, frame, &fontcolor, &metrics, 0, 0, 0)) < 0) { - return ret; + goto fail; } } + ret = 0; +fail: // FREE data structures for (int l = 0; l < s->line_count; ++l) { TextLine *line = &s->lines[l]; @@ -1838,8 +1849,9 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame) } av_freep(&s->lines); av_freep(&s->tab_clusters); + s->line_count = 0; - return 0; + return ret; } static int filter_frame(AVFilterLink *inlink, AVFrame *frame) _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
