diff --git a/libavformat/tta.c b/libavformat/tta.c index d3b3fb04715db7337d81340ab9300eb39ca5fc6b..5789e5b4b87bdafd56daa772ddd4eca537a22721 100644 --- a/libavformat/tta.c +++ b/libavformat/tta.c @@ -56,12 +56,14 @@ static int tta_read_header(AVFormatContext *s) TTAContext *c = s->priv_data; AVStream *st; int i, channels, bps, samplerate; - uint64_t framepos, start_offset; + int64_t framepos, start_offset; uint32_t nb_samples, crc; ff_id3v1_read(s); start_offset = avio_tell(s->pb); + if (start_offset < 0) + return start_offset; ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX); if (avio_rl32(s->pb) != AV_RL32("TTA1")) return AVERROR_INVALIDDATA; @@ -107,7 +109,10 @@ static int tta_read_header(AVFormatContext *s) st->start_time = 0; st->duration = nb_samples; - framepos = avio_tell(s->pb) + 4*c->totalframes + 4; + framepos = avio_tell(s->pb); + if (framepos < 0) + return framepos; + framepos += 4 * c->totalframes + 4; if (ff_alloc_extradata(st->codec, avio_tell(s->pb) - start_offset)) return AVERROR(ENOMEM);