summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-07-10 16:43:00 +0000
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-11-02 04:14:43 +0200
commit5c53ce6bae5575fc708798221dba9e856a8caa8f (patch)
tree03587e554146508d9a705a8afc3691ddccb90c52 /libmpdemux
parent5e95024317add19c376114c40a87e69d969c69ce (diff)
downloadmpv-5c53ce6bae5575fc708798221dba9e856a8caa8f.tar.bz2
mpv-5c53ce6bae5575fc708798221dba9e856a8caa8f.tar.xz
demux_ts: fix crash on broken packets
Check packet size before memmove to avoid crashes e.g. if we recognized the wrong type and subtracted more header bytes than there are overall bytes. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31669 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_ts.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index 2daa7fd50b..31c2c534d1 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -3151,6 +3151,10 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
demuxer->filepos = stream_tell(demuxer->stream) - es->size;
+ if(es->size < 0 || es->size > buf_size) {
+ mp_msg(MSGT_DEMUX, MSGL_ERR, "Broken ES packet size\n");
+ es->size = 0;
+ }
memmove(p, es->start, es->size);
*dp_offset += es->size;
(*dp)->flags = 0;