---
 libavformat/avidec.c |    7 +++++--
 libavformat/mov.c    |   17 ++++++++---------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index cf24e8c..dcf8542 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -614,9 +614,12 @@ static int avi_read_header(AVFormatContext *s)
 
                     if(st->codec->codec_tag==0 && st->codec->height > 0 && 
st->codec->extradata_size < 1U<<30){
                         st->codec->extradata_size+= 9;
-                        st->codec->extradata= av_realloc(st->codec->extradata, 
st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
-                        if(st->codec->extradata)
+                        av_freep(&st->codec->extradata);
+                        st->codec->extradata = 
av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
+                        if (st->codec->extradata)
                             memcpy(st->codec->extradata + 
st->codec->extradata_size - 9, "BottomUp", 9);
+                        else
+                            st->codec->extradata_size = 0;
                     }
                     st->codec->height= FFABS(st->codec->height);
 
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 7e19883..0cf1ab9 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -877,7 +877,6 @@ static int mov_read_extradata(MOVContext *c, AVIOContext 
*pb, MOVAtom atom)
 {
     AVStream *st;
     uint64_t size;
-    uint8_t *buf;
 
     if (c->fc->nb_streams < 1) // will happen with jp2 files
         return 0;
@@ -885,15 +884,15 @@ static int mov_read_extradata(MOVContext *c, AVIOContext 
*pb, MOVAtom atom)
     size= (uint64_t)st->codec->extradata_size + atom.size + 8 + 
FF_INPUT_BUFFER_PADDING_SIZE;
     if (size > INT_MAX || (uint64_t)atom.size > INT_MAX)
         return AVERROR_INVALIDDATA;
-    buf= av_realloc(st->codec->extradata, size);
-    if (!buf)
+    av_freep(&st->codec->extradata);
+    st->codec->extradata = av_malloc(size);
+    if (!st->codec->extradata)
         return AVERROR(ENOMEM);
-    st->codec->extradata= buf;
-    buf+= st->codec->extradata_size;
-    st->codec->extradata_size= size - FF_INPUT_BUFFER_PADDING_SIZE;
-    AV_WB32(       buf    , atom.size + 8);
-    AV_WL32(       buf + 4, atom.type);
-    avio_read(pb, buf + 8, atom.size);
+    st->codec->extradata += st->codec->extradata_size;
+    st->codec->extradata_size = size - FF_INPUT_BUFFER_PADDING_SIZE;
+    AV_WB32(st->codec->extradata, atom.size + 8);
+    AV_WL32(st->codec->extradata + 4, atom.type);
+    avio_read(pb, st->codec->extradata + 8, atom.size);
     return 0;
 }
 
-- 
1.7.10.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to