diff options
author | Marton Balint <cus@passwd.hu> | 2020-01-30 01:29:04 +0300 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2020-01-31 02:15:13 +0300 |
commit | 5ac8389cfa09e9fd42d076c714be30365a2a8557 (patch) | |
tree | c061ea1b8d13557b0461fe5c5f60357fa7d87d1f /libavfilter | |
parent | 6026384047ab8e895d416aab4e2531bd87c0c01d (diff) |
avfilter/vf_drawtext: use replacement chars for invalid UTF8 sequences
continue is explicitly disallowed for GET_UTF8, so let's fix that as well.
Fixes crash with invalid UTF8 sequences.
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/vf_drawtext.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c index aea17b6793..ed10175af0 100644 --- a/libavfilter/vf_drawtext.c +++ b/libavfilter/vf_drawtext.c @@ -1225,7 +1225,8 @@ static int draw_glyphs(DrawTextContext *s, AVFrame *frame, for (i = 0, p = text; *p; i++) { FT_Bitmap bitmap; Glyph dummy = { 0 }; - GET_UTF8(code, *p++, continue;); + GET_UTF8(code, *p++, code = 0xfffd; goto continue_on_invalid;); +continue_on_invalid: /* skip new line chars, just go to new line */ if (code == '\n' || code == '\r' || code == '\t') @@ -1363,7 +1364,8 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame, /* load and cache glyphs */ for (i = 0, p = text; *p; i++) { - GET_UTF8(code, *p++, continue;); + GET_UTF8(code, *p++, code = 0xfffd; goto continue_on_invalid;); +continue_on_invalid: /* get glyph */ dummy.code = code; @@ -1386,7 +1388,8 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame, /* compute and save position for each glyph */ glyph = NULL; for (i = 0, p = text; *p; i++) { - GET_UTF8(code, *p++, continue;); + GET_UTF8(code, *p++, code = 0xfffd; goto continue_on_invalid2;); +continue_on_invalid2: /* skip the \n in the sequence \r\n */ if (prev_code == '\r' && code == '\n') |