mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 08:12:17 +00:00
3533ee3ae4
Fixes test4.mkv from the Matroska test file collection. demux_mkv_open() contains a loop that reads header elements. It starts by reading the EBML element ID with ebml_read_id(). If there is broken data in the header, ebml_read_id() might return EBML_ID_INVALID. However, that is not handled specially, and the code for handling unknown tags is invoked. This reads the EBML element length in order to skip data, which, if the EBML ID is broken, is entirely random. This caused a seek beyond the end of the file, making the demuxer fail. So don't skip any data if the EBML ID was invalid, and simply try to read the next element. ebml_read_id() reads at least one byte, so the parsing loop won't get stuck. All in all this is rather questionable, but since this affects error situations only, makes behavior a bit more robust (no random seeks), and actually fixes at least one sample, it's ok. libavformat's demuxer handled this. |
||
---|---|---|
.. | ||
asf.h | ||
asfguid.h | ||
asfheader.c | ||
asfheader.h | ||
aviheader.c | ||
aviheader.h | ||
aviprint.c | ||
aviprint.h | ||
codec_tags.c | ||
codec_tags.h | ||
demux_asf.c | ||
demux_avi.c | ||
demux_cue.c | ||
demux_edl.c | ||
demux_lavf.c | ||
demux_mf.c | ||
demux_mkv.c | ||
demux_mng.c | ||
demux_mpg.c | ||
demux_packet.h | ||
demux_rawaudio.c | ||
demux_rawvideo.c | ||
demux_ts.c | ||
demux_ts.h | ||
demux.c | ||
demux.h | ||
ebml.c | ||
ebml.h | ||
extension.c | ||
matroska.h | ||
mf.c | ||
mf.h | ||
mp3_hdr.c | ||
mp3_hdr.h | ||
mpeg_hdr.c | ||
mpeg_hdr.h | ||
ms_hdr.h | ||
parse_es.c | ||
parse_es.h | ||
stheader.h | ||
video.c |