[FFmpeg-cvslog] mov: prevent double free if the caller replaces the io context.

Michael Niedermayer git at videolan.org
Tue Jan 22 05:41:03 CET 2013


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Tue Jan 22 05:15:47 2013 +0100| [0a84174f2d41757bcefdc87e9dfb26a7016ab62f] | committer: Michael Niedermayer

mov: prevent double free if the caller replaces the io context.

Fixes Ticket2148

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavformat/isom.h |    1 +
 libavformat/mov.c  |    6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavformat/isom.h b/libavformat/isom.h
index 0360c53..4154baf 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -94,6 +94,7 @@ typedef struct MOVSbgp {
 
 typedef struct MOVStreamContext {
     AVIOContext *pb;
+    int pb_is_copied;
     int ffindex;          ///< AVStream index
     int next_chunk;
     unsigned int chunk_count;
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 6c78adb..7f7c0e1 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -2230,8 +2230,10 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
                    "filename='%s', volume='%s', nlvl_from=%d, nlvl_to=%d\n",
                    st->index, dref->path, dref->dir, dref->filename,
                    dref->volume, dref->nlvl_from, dref->nlvl_to);
-    } else
+    } else {
         sc->pb = c->fc->pb;
+        sc->pb_is_copied = 1;
+    }
 
     if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
         if (!st->sample_aspect_ratio.num &&
@@ -3071,7 +3073,7 @@ static int mov_read_close(AVFormatContext *s)
             av_freep(&sc->drefs[j].dir);
         }
         av_freep(&sc->drefs);
-        if (sc->pb && sc->pb != s->pb)
+        if (!sc->pb_is_copied)
             avio_close(sc->pb);
         sc->pb = NULL;
         av_freep(&sc->chunk_offsets);



More information about the ffmpeg-cvslog mailing list