mirror of
https://github.com/librempeg/librempeg
synced 2024-11-22 18:49:58 +00:00
avformat/utils: Fix undefined behavior in ff_configure_buffers_for_index()
When e2_pts == INT64_MIN and e1_pts >= 0 the calculation of e2_pts - e1_pts will overflow an int64_t. Signed-off-by: Dale Curtis <dalecurtis@chromium.org> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
f3bb59209f
commit
f15007afa9
@ -2108,6 +2108,8 @@ void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
|
||||
//We could use URLProtocol flags here but as many user applications do not use URLProtocols this would be unreliable
|
||||
const char *proto = avio_find_protocol_name(s->url);
|
||||
|
||||
av_assert0(time_tolerance >= 0);
|
||||
|
||||
if (!proto) {
|
||||
av_log(s, AV_LOG_INFO,
|
||||
"Protocol name not provided, cannot determine if input is local or "
|
||||
@ -2135,7 +2137,7 @@ void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
|
||||
for (; i2 < st2->nb_index_entries; i2++) {
|
||||
AVIndexEntry *e2 = &st2->index_entries[i2];
|
||||
int64_t e2_pts = av_rescale_q(e2->timestamp, st2->time_base, AV_TIME_BASE_Q);
|
||||
if (e2_pts - e1_pts < time_tolerance)
|
||||
if (e2_pts < e1_pts || e2_pts - (uint64_t)e1_pts < time_tolerance)
|
||||
continue;
|
||||
pos_delta = FFMAX(pos_delta, e1->pos - e2->pos);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user