diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-08-06 01:44:55 +0300 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-08-09 20:07:23 +0300 |
commit | a3dced69c8e0759d7cfd74e88f16c357d731b75c (patch) | |
tree | 2e43d868345277e70eae758c1d4291bd9a6d62bf /libavformat | |
parent | 4ad77086b96b2bf2f801993e3637297fa43a412c (diff) |
avformat/vividas: Check return value before storing it in smaller type
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/vividas.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libavformat/vividas.c b/libavformat/vividas.c index b0f9f35ac2..708adc8801 100644 --- a/libavformat/vividas.c +++ b/libavformat/vividas.c @@ -432,19 +432,20 @@ static int track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *bu AVIOContext pb0, *pb = &pb0; int i; int64_t filesize = avio_size(s->pb); + uint64_t n_sb_blocks_tmp; ffio_init_context(pb, buf, size, 0, NULL, NULL, NULL, NULL); ffio_read_varlen(pb); // track_index_len avio_r8(pb); // 'c' - viv->n_sb_blocks = ffio_read_varlen(pb); - if (viv->n_sb_blocks < 0 || viv->n_sb_blocks > size / 2) + n_sb_blocks_tmp = ffio_read_varlen(pb); + if (n_sb_blocks_tmp > size / 2) goto error; - viv->sb_blocks = av_calloc(viv->n_sb_blocks, sizeof(VIV_SB_block)); + viv->sb_blocks = av_calloc(n_sb_blocks_tmp, sizeof(*viv->sb_blocks)); if (!viv->sb_blocks) { - viv->n_sb_blocks = 0; return AVERROR(ENOMEM); } + viv->n_sb_blocks = n_sb_blocks_tmp; off = 0; poff = 0; |