mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
libavformat/matroskadec: fix unsigned overflow to improve seeking
When seeking a file where codec delay is greater than 0, the timecode can become negative after offsetting by the codec delay. Failing to cast to a signed int64 will cause the check against skip_to_timecode to evaluate true for these negative values. This breaks the "skip_to" seek mechanism. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
0a088dea3d
commit
d59820f6fe
@ -3150,7 +3150,10 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
|
||||
|
||||
if (matroska->skip_to_keyframe &&
|
||||
track->type != MATROSKA_TRACK_TYPE_SUBTITLE) {
|
||||
if (timecode < matroska->skip_to_timecode)
|
||||
// Compare signed timecodes. Timecode may be negative due to codec delay
|
||||
// offset. We don't support timestamps greater than int64_t anyway - see
|
||||
// AVPacket's pts.
|
||||
if ((int64_t)timecode < (int64_t)(matroska->skip_to_timecode))
|
||||
return res;
|
||||
if (is_keyframe)
|
||||
matroska->skip_to_keyframe = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user