]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/movtextdec: Skip empty styles
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Sat, 17 Oct 2020 15:48:54 +0000 (17:48 +0200)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Mon, 19 Oct 2020 03:02:00 +0000 (05:02 +0200)
They would either lead to unnecessary ASS tags being emitted (namely
tags that are reset immediately thereafter) or would lead to problems
when parsing: e.g. if a zero-length style immediately follows another
style, the current code will end the preceding style and set the
zero-length style as the next potentially active style, but it is only
tested for activation when the next character is parsed at which point
the current offset is already greater than both the starting as well
as the end offset of the empty style. It will therefore neither be
opened nor closed and all subsequent styles will be ignored.

Reviewed-by: Philip Langdale <philipl@overt.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavcodec/movtextdec.c

index e9df979e926dc21a6d24094bbe5673114444d2f9..d167eddea580e63274f21f00b6641818a42b9821 100644 (file)
@@ -302,6 +302,14 @@ static int decode_styl(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
         }
 
         tsmb += 2;
+        if (style->style_start == style->style_end) {
+            /* Skip this style as it applies to no character */
+            tsmb += 8;
+            m->style_entries--;
+            i--;
+            continue;
+        }
+
         style->style_fontID = AV_RB16(tsmb);
         tsmb += 2;
         style->style_flag = AV_RB8(tsmb);