summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2015-12-02 22:59:56 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2015-12-03 00:13:27 +0100
commitec7a3be11ed33002c8609e5d30e908a7c8827a43 (patch)
tree347d986c14e110a8a20c0a6ec05887e977edc1bc /libavformat
parentd872643cfe07e39fee42c846d5a3f57d5cad6ab6 (diff)
avformat/utils: Move end_time1 AV_NOPTS_VALUE Check after rescale
Fixes integer overflow Fixes: 266ee543812e934f7b4a72923a2701d4/signal_sigabrt_7ffff6ae7cc9_7322_85218d61759d461bdf7387180e8000c9.ogg Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/utils.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 4475df9ddb..973256f2f2 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2342,11 +2342,11 @@ static void update_stream_timings(AVFormatContext *ic)
start_time_text = start_time1;
} else
start_time = FFMIN(start_time, start_time1);
- end_time1 = AV_NOPTS_VALUE;
- if (st->duration != AV_NOPTS_VALUE) {
- end_time1 = start_time1 +
- av_rescale_q(st->duration, st->time_base,
- AV_TIME_BASE_Q);
+ 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) {
+ end_time1 += start_time1;
end_time = FFMAX(end_time, end_time1);
}
for (p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {