summaryrefslogtreecommitdiffstats
path: root/libavformat/4xm.c
diff options
context:
space:
mode:
authorAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>2016-12-14 01:53:14 +0100
committerAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>2016-12-15 01:25:34 +0100
commite558a6348ac10e74c54fb50ffd783ff9b5aec050 (patch)
tree702e1cabae3a9773bd802818ac0c9e3bb04c378a /libavformat/4xm.c
parente54b61a9ce19aa532e176869e8fcfc955dca6222 (diff)
downloadffmpeg-streaming-e558a6348ac10e74c54fb50ffd783ff9b5aec050.zip
ffmpeg-streaming-e558a6348ac10e74c54fb50ffd783ff9b5aec050.tar.gz
4xm: prevent overflow during bit rate calculation
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Diffstat (limited to 'libavformat/4xm.c')
-rw-r--r--libavformat/4xm.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libavformat/4xm.c b/libavformat/4xm.c
index 8a50778..2758b69 100644
--- a/libavformat/4xm.c
+++ b/libavformat/4xm.c
@@ -163,6 +163,12 @@ static int parse_strk(AVFormatContext *s,
return AVERROR_INVALIDDATA;
}
+ if (fourxm->tracks[track].sample_rate > INT64_MAX / fourxm->tracks[track].bits / fourxm->tracks[track].channels) {
+ av_log(s, AV_LOG_ERROR, "Overflow during bit rate calculation %d * %d * %d\n",
+ fourxm->tracks[track].sample_rate, fourxm->tracks[track].bits, fourxm->tracks[track].channels);
+ return AVERROR_INVALIDDATA;
+ }
+
/* allocate a new AVStream */
st = avformat_new_stream(s, NULL);
if (!st)
@@ -178,7 +184,7 @@ static int parse_strk(AVFormatContext *s,
st->codecpar->channels = fourxm->tracks[track].channels;
st->codecpar->sample_rate = fourxm->tracks[track].sample_rate;
st->codecpar->bits_per_coded_sample = fourxm->tracks[track].bits;
- st->codecpar->bit_rate = st->codecpar->channels *
+ st->codecpar->bit_rate = (int64_t)st->codecpar->channels *
st->codecpar->sample_rate *
st->codecpar->bits_per_coded_sample;
st->codecpar->block_align = st->codecpar->channels *
OpenPOWER on IntegriCloud