aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2019-07-20 22:36:10 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2019-08-04 21:16:28 +0200
commit7ce1e57c016d8a7ea17e8a18b5f5b4e146f767b9 (patch)
tree133a1f572b0db7a9bf74c861a9328b19dc6d8e76
parentc8dea60fcab51a91cc54eccc94db6d7503ee8a52 (diff)
downloadffmpeg-7ce1e57c016d8a7ea17e8a18b5f5b4e146f767b9.tar.gz
avformat/vividas: forward errors from track_header()
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 8bac648359b78cd4aa02b5fc91c24a32cc3bddfa) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/vividas.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/libavformat/vividas.c b/libavformat/vividas.c
index 184d24f374..1895c75858 100644
--- a/libavformat/vividas.c
+++ b/libavformat/vividas.c
@@ -273,7 +273,7 @@ static uint8_t *read_sb_block(AVIOContext *src, unsigned *size,
return buf;
}
-static void track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *buf, int size)
+static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *buf, int size)
{
int i,j;
int64_t off;
@@ -283,7 +283,7 @@ static void track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t
pb = avio_alloc_context(buf, size, 0, NULL, NULL, NULL, NULL);
if (!pb)
- return;
+ return AVERROR(ENOMEM);
ffio_read_varlen(pb); // track_header_len
avio_r8(pb); // '1'
@@ -380,7 +380,7 @@ static void track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t
st->codecpar->extradata_size = 64 + xd_size + xd_size / 255;
if (ff_alloc_extradata(st->codecpar, st->codecpar->extradata_size))
- return;
+ return AVERROR(ENOMEM);
p = st->codecpar->extradata;
p[0] = 2;
@@ -404,6 +404,7 @@ static void track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t
}
av_free(pb);
+ return 0;
}
static void track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *buf, unsigned size)
@@ -506,6 +507,7 @@ static int viv_read_header(AVFormatContext *s)
uint32_t b22_size = 0;
uint32_t b22_key = 0;
uint8_t *buf = 0;
+ int ret;
avio_skip(pb, 9);
@@ -561,8 +563,10 @@ static int viv_read_header(AVFormatContext *s)
buf = read_vblock(pb, &v, key, &k2, 0);
if (!buf)
return AVERROR(EIO);
- track_header(viv, s, buf, v);
+ ret = track_header(viv, s, buf, v);
av_free(buf);
+ if (ret < 0)
+ return ret;
buf = read_vblock(pb, &v, key, &k2, v);
if (!buf)