Based on an FFmpeg patch by Michael Niedermayer <[email protected]>
---
libavformat/mov.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 8ff6022..e56b8e9 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1891,15 +1891,18 @@ static int mov_read_stsd(MOVContext *c, AVIOContext
*pb, MOVAtom atom)
if (!sc->extradata)
return AVERROR(ENOMEM);
- sc->stsd_count = entries;
- sc->extradata_size = av_mallocz_array(sc->stsd_count,
sizeof(*sc->extradata_size));
- if (!sc->extradata_size)
- return AVERROR(ENOMEM);
+ sc->extradata_size = av_mallocz_array(entries,
sizeof(*sc->extradata_size));
+ if (!sc->extradata_size) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
- ret = ff_mov_read_stsd_entries(c, pb, sc->stsd_count);
+ ret = ff_mov_read_stsd_entries(c, pb, entries);
if (ret < 0)
return ret;
+ sc->stsd_count = entries;
+
/* Restore back the primary extradata. */
av_free(st->codecpar->extradata);
st->codecpar->extradata_size = sc->extradata_size[0];
@@ -1909,6 +1912,10 @@ static int mov_read_stsd(MOVContext *c, AVIOContext *pb,
MOVAtom atom)
memcpy(st->codecpar->extradata, sc->extradata[0], sc->extradata_size[0]);
return 0;
+fail:
+ av_freep(&sc->extradata);
+ av_freep(&sc->extradata_size);
+ return ret;
}
static int mov_read_stsc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
--
2.7.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel