avformat/utils: avoid overflow in update_stream_timings() with huge durations
authorMichael Niedermayer <michael@niedermayer.cc>
Sat, 28 May 2016 21:51:35 +0000 (23:51 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sun, 5 Jun 2016 00:40:31 +0000 (02:40 +0200)
Fixes: usan_granule_overflow

Found-by: Thomas Guilbert <tguilbert@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit 2be3007ed55f1513bcae3d2a076e71878f48eb03)

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavformat/utils.c

index 7ed21b6..fe684c3 100644 (file)
@@ -2370,7 +2370,7 @@ static void update_stream_timings(AVFormatContext *ic)
             end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
                                          AV_TIME_BASE_Q,
                                          AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
-            if (end_time1 != AV_NOPTS_VALUE) {
+            if (end_time1 != AV_NOPTS_VALUE && start_time1 <= INT64_MAX - end_time1) {
                 end_time1 += start_time1;
                 end_time = FFMAX(end_time, end_time1);
             }