1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-21 06:14:32 +00:00
mpv/demux
wm4 95dce50347 demux: fix crash due to incorrect seek range accounting
update_seek_ranges() has some special code that attempts to correctly
adjust seek ranges for subtitle tracks. (Subtitle are a nightmare for
seek ranges, because they are sparse, so using the packet list is not
enough to reliably determine the valid cached range.)

This had code like this inside the modified if statement:

  range->seek_start = MP_PTS_MAX(range->seek_start, <something>);

If seek_start is NOPTS, then seek_start will be set to <something>,
breaking some other code that checks seek_start for NOPTS to see if it's
empty. Fix this by explicitly checking whether seek_start is NOPTS
before adjusting it.

The crash happened in prune_old_packets() because the range was marked
as non-empty, yet there was no packet in it to prune. This was with
files with muxed subtitles, when seeking back to the start. This should
not happen anymore with the change. Also add an assert() to
check_queue_consistency() that checks for this specific case.

There's still some mess. In theory, subtitle tracks could be completely
empty, yet their seek range would span the entire file. Seek range
tracking of subtitle files is slightly broken (even before this change).
Some of this should probably be revisited later, including not just
using seek_start to determine whether a seek range should be pruned due
to being empty.
2018-01-05 18:34:29 -08:00
..
codec_tags.c
codec_tags.h
cue.c
cue.h
demux_cue.c demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH 2017-06-20 14:22:10 +02:00
demux_disc.c demux_disc: fix bluray subtitle language retrieval 2017-07-16 19:02:35 +02:00
demux_edl.c demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH 2017-06-20 14:22:10 +02:00
demux_lavf.c demux_lavf: always give libavformat the filename when probing 2017-11-12 19:38:45 +01:00
demux_libarchive.c
demux_mf.c build: switch preliminary LGPL mode from v3 to v2.1 2017-10-05 15:57:30 +02:00
demux_mkv_timeline.c demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH 2017-06-20 14:22:10 +02:00
demux_mkv.c demux_mkv: fix x264 hack if video track uses header compression 2017-12-30 00:37:58 -07:00
demux_null.c
demux_playlist.c demux_playlist: support .url files 2017-11-12 15:51:48 +01:00
demux_rar.c
demux_raw.c demux_raw: change license to LGPL 2017-06-24 13:56:53 +02:00
demux_timeline.c demux_timeline: disable pointless packet cache for sub-demuxers 2017-12-10 06:37:49 +02:00
demux_tv.c demux_tv.c: add missing copyright header 2017-06-21 18:13:53 +02:00
demux.c demux: fix crash due to incorrect seek range accounting 2018-01-05 18:34:29 -08:00
demux.h player: update duration based on highest timestamp demuxed 2017-12-24 21:49:12 +01:00
ebml.c Fix various typos in log messages 2017-12-03 21:24:18 +01:00
ebml.h demux_mkv: rewrite packet reading to avoid 1 memcpy() 2017-11-05 18:13:34 +01:00
matroska.h
packet.c demux_mkv: rewrite packet reading to avoid 1 memcpy() 2017-11-05 18:13:34 +01:00
packet.h demux_mkv: rewrite packet reading to avoid 1 memcpy() 2017-11-05 18:13:34 +01:00
stheader.h demux_mkv: add hack to pass along x264 version to decoder 2017-12-28 00:59:22 -07:00
timeline.c
timeline.h