OSDN Git Service

avformat/oggparseopus: Check that granule pos is within the supported range
authorMichael Niedermayer <michael@niedermayer.cc>
Tue, 10 May 2016 21:12:58 +0000 (23:12 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Tue, 10 May 2016 22:32:32 +0000 (00:32 +0200)
Larger values would imply file durations of astronomic proportions and cause
overflows

Fixes integer overflow
Fixes: usan_int64_overflow

Found-by: Thomas Guilbert <tguilbert@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavformat/oggparseopus.c

index 8191b10..99aa439 100644 (file)
@@ -117,6 +117,10 @@ static int opus_packet(AVFormatContext *avf, int idx)
 
     if (!os->psize)
         return AVERROR_INVALIDDATA;
+    if (os->granule > INT64_MAX - UINT32_MAX) {
+        av_log(avf, AV_LOG_ERROR, "Unsupported huge granule pos %"PRId64 "\n", os->granule);
+        return AVERROR_INVALIDDATA;
+    }
 
     if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) {
         int seg, d;