mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-09-20 05:16:38 +00:00
avformat/mov: Fix integer overflows related to sample_duration
Fixes: runtime error: signed integer overflow: -9166684017437101870 + -2495066639299164439 cannot be represented in type
Fixes: Chromium bug 791349
Reported-by: Matt Wolenetz <wolenetz@google.com>
Reviewed-by: Matt Wolenetz <wolenetz@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit 2f37082827
)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
3a29fda42a
commit
edfe9ae63b
@ -2672,14 +2672,19 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
&& total_sample_count > 100
|
&& total_sample_count > 100
|
||||||
&& sample_duration/10 > duration / total_sample_count)
|
&& sample_duration/10 > duration / total_sample_count)
|
||||||
sample_duration = duration / total_sample_count;
|
sample_duration = duration / total_sample_count;
|
||||||
duration+=(int64_t)sample_duration*sample_count;
|
duration+=(int64_t)sample_duration*(uint64_t)sample_count;
|
||||||
total_sample_count+=sample_count;
|
total_sample_count+=sample_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
sc->stts_count = i;
|
sc->stts_count = i;
|
||||||
|
|
||||||
sc->duration_for_fps += duration;
|
if (duration > 0 &&
|
||||||
sc->nb_frames_for_fps += total_sample_count;
|
duration <= INT64_MAX - sc->duration_for_fps &&
|
||||||
|
total_sample_count <= INT64_MAX - sc->nb_frames_for_fps
|
||||||
|
) {
|
||||||
|
sc->duration_for_fps += duration;
|
||||||
|
sc->nb_frames_for_fps += total_sample_count;
|
||||||
|
}
|
||||||
|
|
||||||
if (pb->eof_reached)
|
if (pb->eof_reached)
|
||||||
return AVERROR_EOF;
|
return AVERROR_EOF;
|
||||||
@ -4340,8 +4345,13 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
dts += sample_duration;
|
dts += sample_duration;
|
||||||
offset += sample_size;
|
offset += sample_size;
|
||||||
sc->data_size += sample_size;
|
sc->data_size += sample_size;
|
||||||
sc->duration_for_fps += sample_duration;
|
|
||||||
sc->nb_frames_for_fps ++;
|
if (sample_duration <= INT64_MAX - sc->duration_for_fps &&
|
||||||
|
1 <= INT64_MAX - sc->nb_frames_for_fps
|
||||||
|
) {
|
||||||
|
sc->duration_for_fps += sample_duration;
|
||||||
|
sc->nb_frames_for_fps ++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pb->eof_reached)
|
if (pb->eof_reached)
|
||||||
|
Loading…
Reference in New Issue
Block a user