From 50b4dbf65a8b0fbd0155e1ffc0ed58fa591d3736 Mon Sep 17 00:00:00 2001
From: Philip Langdale <philipl@overt.org>
Date: Sun, 5 Aug 2012 08:57:20 -0700
Subject: [PATCH] ass subtitles: Fix valgrind warnings.

We're now running some of this code through valgrind for the first
time, and a few warnings showed up stemming from two problems.

1) The ASS code assumes the subtitle header is null terminated, but
it wasn't, and passing the size down doesn't look like fun, so I
added a terminator

2) The code wasn't freeing all of its state.

Signed-off-by: Philip Langdale <philipl@overt.org>
---
 ffmpeg.c               | 3 ++-
 libavcodec/ass_split.c | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 6098422375e..faeb2f5c3a5 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3366,7 +3366,8 @@ static int transcode_init(void)
             if ((ist = get_input_stream(ost)))
                 dec = ist->st->codec;
             if (dec && dec->subtitle_header) {
-                ost->st->codec->subtitle_header = av_malloc(dec->subtitle_header_size);
+                /* ASS code assumes this buffer is null terminated so add extra byte. */
+                ost->st->codec->subtitle_header = av_mallocz(dec->subtitle_header_size + 1);
                 if (!ost->st->codec->subtitle_header) {
                     ret = AVERROR(ENOMEM);
                     goto dump_format;
diff --git a/libavcodec/ass_split.c b/libavcodec/ass_split.c
index a0b72542c74..81d501eefe6 100644
--- a/libavcodec/ass_split.c
+++ b/libavcodec/ass_split.c
@@ -352,8 +352,10 @@ void ff_ass_split_free(ASSSplitContext *ctx)
 {
     if (ctx) {
         int i;
-        for (i=0; i<FF_ARRAY_ELEMS(ass_sections); i++)
+        for (i=0; i<FF_ARRAY_ELEMS(ass_sections); i++) {
             free_section(ctx, &ass_sections[i]);
+            av_freep(&(ctx->field_order[i]));
+        }
         av_free(ctx);
     }
 }
-- 
GitLab