Quick hack to fix demux_mov crashes where easily possible.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27263 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2008-07-11 20:22:07 +00:00
parent ed0edb61cb
commit baae5f1bdd
1 changed files with 16 additions and 16 deletions

View File

@ -205,9 +205,9 @@ void mov_build_index(mov_track_t* trak,int timescale){
// workaround for fixed-size video frames (dv and uncompressed)
if(!trak->samples_size && trak->type!=MOV_TRAK_AUDIO){
trak->samples_size=s;
trak->samples=calloc(s, sizeof(mov_sample_t));
for(i=0;i<s;i++)
trak->samples_size=trak->samples ? s : 0;
for(i=0;i<trak->samples_size;i++)
trak->samples[i].size=trak->samplesize;
trak->samplesize=0;
}
@ -224,8 +224,8 @@ void mov_build_index(mov_track_t* trak,int timescale){
mp_msg(MSGT_DEMUX, MSGL_WARN,
"MOV: durmap or chunkmap bigger than sample count (%i vs %i)\n",
s, trak->samples_size);
trak->samples_size = s;
trak->samples = realloc_struct(trak->samples, s, sizeof(mov_sample_t));
trak->samples_size = trak->samples ? s : 0;
}
// calc pts:
@ -1748,8 +1748,8 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
"MOV: %*sSample duration table! (%d blocks)\n", level, "",
len);
trak->durmap = calloc(len, sizeof(mov_durmap_t));
trak->durmap_size = len;
for (i = 0; i < len; i++) {
trak->durmap_size = trak->durmap ? 0 : len;
for (i = 0; i < trak->durmap_size; i++) {
trak->durmap[i].num = stream_read_dword(demuxer->stream);
trak->durmap[i].dur = stream_read_dword(demuxer->stream);
pts += trak->durmap[i].num * trak->durmap[i].dur;
@ -1769,9 +1769,9 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
"MOV: %*sSample->Chunk mapping table! (%d blocks) (ver:%d,flags:%d)\n", level, "",
len, ver, flags);
// read data:
trak->chunkmap_size = len;
trak->chunkmap = calloc(len, sizeof(mov_chunkmap_t));
for (i = 0; i < len; i++) {
trak->chunkmap_size = trak->chunkmap ? len : 0;
for (i = 0; i < trak->chunkmap_size; i++) {
trak->chunkmap[i].first = stream_read_dword(demuxer->stream) - 1;
trak->chunkmap[i].spc = stream_read_dword(demuxer->stream);
trak->chunkmap[i].sdid = stream_read_dword(demuxer->stream);
@ -1793,7 +1793,7 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
// variable samplesize
trak->samples = realloc_struct(trak->samples, entries, sizeof(mov_sample_t));
trak->samples_size = entries;
for (i = 0; i < entries; i++)
for (i = 0; i < trak->samples_size; i++)
trak->samples[i].size = stream_read_dword(demuxer->stream);
}
break;
@ -1808,10 +1808,10 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
// extend array if needed:
if (len > trak->chunks_size) {
trak->chunks = realloc_struct(trak->chunks, len, sizeof(mov_chunk_t));
trak->chunks_size = len;
trak->chunks_size = trak->chunks ? len : 0;
}
// read elements:
for(i = 0; i < len; i++)
for(i = 0; i < trak->chunks_size; i++)
trak->chunks[i].pos = stream_read_dword(demuxer->stream);
break;
}
@ -1825,10 +1825,10 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
// extend array if needed:
if (len > trak->chunks_size) {
trak->chunks = realloc_struct(trak->chunks, len, sizeof(mov_chunk_t));
trak->chunks_size = len;
trak->chunks_size = trak->chunks ? len : 0;
}
// read elements:
for (i = 0; i < len; i++) {
for (i = 0; i < trak->chunks_size; i++) {
#ifndef _LARGEFILE_SOURCE
if (stream_read_dword(demuxer->stream) != 0)
mp_msg(MSGT_DEMUX, MSGL_WARN, "Chunk %d has got 64bit address, but you've MPlayer compiled without LARGEFILE support!\n", i);
@ -1848,9 +1848,9 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
mp_msg(MSGT_DEMUX, MSGL_V,
"MOV: %*sSyncing samples (keyframes) table! (%d entries) (ver:%d,flags:%d)\n", level, "",
entries, ver, flags);
trak->keyframes_size = entries;
trak->keyframes = calloc(entries, sizeof(unsigned int));
for (i = 0; i < entries; i++)
trak->keyframes_size = trak->keyframes ? entries : 0;
for (i = 0; i < trak->keyframes_size; i++)
trak->keyframes[i] = stream_read_dword(demuxer->stream) - 1;
break;
}
@ -1884,9 +1884,9 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
"MOV: %*sEdit list table (%d entries) (ver:%d,flags:%d)\n", level, "",
entries, ver, flags);
#if 1
trak->editlist_size = entries;
trak->editlist = calloc(trak->editlist_size, sizeof(mov_editlist_t));
for (i = 0; i < entries; i++) {
trak->editlist_size = trak->editlist ? entries : 0;
for (i = 0; i < trak->editlist_size; i++) {
int dur = stream_read_dword(demuxer->stream);
int mt = stream_read_dword(demuxer->stream);
int mr = stream_read_dword(demuxer->stream); // 16.16fp