[FFmpeg-cvslog] avformat/utils: Check start/ end before computing duration in update_stream_timings()
Michael Niedermayer
git at videolan.org
Sun Dec 4 02:58:11 EET 2016
ffmpeg | branch: release/2.8 | Michael Niedermayer <michael at niedermayer.cc> | Sat Dec 3 03:02:41 2016 +0100| [3af916db3705593a4408bb25671a1ecf5dec813f] | committer: Michael Niedermayer
avformat/utils: Check start/end before computing duration in update_stream_timings()
Fixes undefined behavior
Fixes: 637428.ogg
Found-by: Matt Wolenetz <wolenetz at google.com>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
(cherry picked from commit 90da187f1d334422477886a19eca3c1da29c59a7)
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3af916db3705593a4408bb25671a1ecf5dec813f
---
libavformat/utils.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 92b38ad..a705065 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2363,11 +2363,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) {
More information about the ffmpeg-cvslog
mailing list