diff options
author | Matthias Hopf <mhopf@suse.de> | 2008-12-31 22:36:35 +0100 |
---|---|---|
committer | Matthias Hopf <mhopf@suse.de> | 2008-12-31 22:36:35 +0100 |
commit | bce49846158d839f0fe5185d9956edd1492f9fc3 (patch) | |
tree | f58c55ba85d0af323972fb76339a24e370f044f9 | |
parent | 0d4380861db644bcd758d596c638886b1578f601 (diff) | |
download | xine-lib-bce49846158d839f0fe5185d9956edd1492f9fc3.tar.gz xine-lib-bce49846158d839f0fe5185d9956edd1492f9fc3.tar.bz2 |
check that track's codec_private_len fits in signed variables when decoding matroska
while codec_private_len is unsigned, the size is later used to calculate
the signed xine_bmiheader.size
-rw-r--r-- | src/demuxers/demux_matroska.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c index 0a96295ec..12cd282dd 100644 --- a/src/demuxers/demux_matroska.c +++ b/src/demuxers/demux_matroska.c @@ -1302,6 +1302,9 @@ static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { xine_bmiheader *bih; lprintf("MATROSKA_CODEC_ID_V_MPEG4_*\n"); + if (track->codec_private_len > 0x7fffffff - sizeof(xine_bmiheader)) + track->codec_private_len = 0x7fffffff - sizeof(xine_bmiheader); + /* create a bitmap info header struct for MPEG 4 */ bih = malloc(sizeof(xine_bmiheader) + track->codec_private_len); bih->biSize = sizeof(xine_bmiheader) + track->codec_private_len; @@ -1323,6 +1326,9 @@ static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { xine_bmiheader *bih; lprintf("MATROSKA_CODEC_ID_V_MPEG4_AVC\n"); + if (track->codec_private_len > 0x7fffffff - sizeof(xine_bmiheader)) + track->codec_private_len = 0x7fffffff - sizeof(xine_bmiheader); + /* create a bitmap info header struct for h264 */ bih = malloc(sizeof(xine_bmiheader) + track->codec_private_len); bih->biSize = sizeof(xine_bmiheader) + track->codec_private_len; |