aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-12-03 03:02:41 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2017-08-23 13:15:16 +0200
commit1a383992ee2b9679bb8b0ef0f44c7471da636980 (patch)
tree0c2b50cfc5fd215837268df7d177a7f2b2dcba45
parent364f7ad5b0de79d33b2b4c159ae8e3d3b3f26096 (diff)
downloadffmpeg-1a383992ee2b9679bb8b0ef0f44c7471da636980.tar.gz
avformat/utils: Check start/end before computing duration in update_stream_timings()
Fixes undefined behavior Fixes: 637428.ogg Found-by: Matt Wolenetz <wolenetz@google.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 90da187f1d334422477886a19eca3c1da29c59a7) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/utils.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 0b84711b7f..c713d62804 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2235,11 +2235,14 @@ static void update_stream_timings(AVFormatContext *ic)
if (ic->nb_programs) {
for (i = 0; i < ic->nb_programs; i++) {
p = ic->programs[i];
- if (p->start_time != AV_NOPTS_VALUE && p->end_time > p->start_time)
+ if (p->start_time != AV_NOPTS_VALUE &&
+ p->end_time > p->start_time &&
+ p->end_time - (uint64_t)p->start_time <= INT64_MAX)
duration = FFMAX(duration, p->end_time - p->start_time);
}
- } else
+ } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
duration = FFMAX(duration, end_time - start_time);
+ }
}
}
if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {