Browse Source

avfilter/vf_drawtext: do not overread text if the last UTF8 sequence is invalid

Signed-off-by: Marton Balint <cus@passwd.hu>
Marton Balint 5 years ago
parent
commit
62d92a878d
1 changed files with 3 additions and 3 deletions
  1. 3 3
      libavfilter/vf_drawtext.c

+ 3 - 3
libavfilter/vf_drawtext.c

@@ -1225,7 +1225,7 @@ 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++, code = 0xfffd; goto continue_on_invalid;);
+        GET_UTF8(code, *p ? *p++ : 0, code = 0xfffd; goto continue_on_invalid;);
 continue_on_invalid:
 
         /* skip new line chars, just go to new line */
@@ -1364,7 +1364,7 @@ static int draw_text(AVFilterContext *ctx, AVFrame *frame,
 
     /* load and cache glyphs */
     for (i = 0, p = text; *p; i++) {
-        GET_UTF8(code, *p++, code = 0xfffd; goto continue_on_invalid;);
+        GET_UTF8(code, *p ? *p++ : 0, code = 0xfffd; goto continue_on_invalid;);
 continue_on_invalid:
 
         /* get glyph */
@@ -1388,7 +1388,7 @@ continue_on_invalid:
     /* compute and save position for each glyph */
     glyph = NULL;
     for (i = 0, p = text; *p; i++) {
-        GET_UTF8(code, *p++, code = 0xfffd; goto continue_on_invalid2;);
+        GET_UTF8(code, *p ? *p++ : 0, code = 0xfffd; goto continue_on_invalid2;);
 continue_on_invalid2:
 
         /* skip the \n in the sequence \r\n */