On 31/01/2023 11:13, Tim Angus wrote:
In the write_header function of the ASS encoder, extradata is
searched for a substring using the strstr function. strstr expects a
null terminated C string as its first parameter, but extradata is
(notionally) not one of these, meaning that the calls to strstr only
happen to work because (presumably) they encounter a 0 byte somewhere
downstream of extradata. I say notionally because often extradata will
in fact be null terminated (which causes other problems, see parent
commit).

Signed-off-by: Tim Angus <t...@ngus.net>
---
  libavformat/assenc.c | 8 ++++----
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavformat/assenc.c b/libavformat/assenc.c
index 4c9ea6f982..f6f5293bb7 100644
--- a/libavformat/assenc.c
+++ b/libavformat/assenc.c
@@ -83,12 +83,12 @@ static int write_header(AVFormatContext *s)
          if (header_string[strlen(header_string) - 1] != '\n')
              avio_printf(s->pb, "\r\n");
- av_free(header_string);
-
-        ass->ssa_mode = !strstr(par->extradata, "\n[V4+ Styles]");
-        if (!strstr(par->extradata, "\n[Events]"))
+        ass->ssa_mode = !strstr(header_string, "\n[V4+ Styles]");
+        if (!strstr(header_string, "\n[Events]"))
              avio_printf(s->pb, "[Events]\r\nFormat: %s, Start, End, Style, Name, 
MarginL, MarginR, MarginV, Effect, Text\r\n",
                          ass->ssa_mode ? "Marked" : "Layer");
+
+        av_free(header_string);
      }
return 0;

Apparently extradata is padded with zeroes, so this is probably unnecessary, strictly speaking. Having said that, reasoning about why the code works is less obscure with the patch applied.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to