[FFmpeg-cvslog] ass subtitles: Fix valgrind warnings.

Philip Langdale git at videolan.org
Sun Aug 5 18:14:43 CEST 2012


ffmpeg | branch: master | Philip Langdale <philipl at overt.org> | Sun Aug  5 08:57:20 2012 -0700| [50b4dbf65a8b0fbd0155e1ffc0ed58fa591d3736] | committer: Philip Langdale

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 at overt.org>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=50b4dbf65a8b0fbd0155e1ffc0ed58fa591d3736
---

 ffmpeg.c               |    3 ++-
 libavcodec/ass_split.c |    4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 6098422..faeb2f5 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 a0b7254..81d501e 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);
     }
 }



More information about the ffmpeg-cvslog mailing list