avoid crashing when trying to parse invalid files, patch by Andreas Oman, andreas at olebyn dot nu

Originally committed as revision 6752 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Andreas Öman 2006-10-21 11:17:39 +00:00 committed by Baptiste Coudurier
parent 487240b026
commit 71bd023da5
1 changed files with 7 additions and 2 deletions

View File

@ -122,7 +122,7 @@ static int seq_parse_frame_data(SeqDemuxContext *seq, ByteIOContext *pb)
{ {
unsigned int offset_table[4], buffer_num[4]; unsigned int offset_table[4], buffer_num[4];
TiertexSeqFrameBuffer *seq_buffer; TiertexSeqFrameBuffer *seq_buffer;
int i, e; int i, e, err;
seq->current_frame_offs += SEQ_FRAME_SIZE; seq->current_frame_offs += SEQ_FRAME_SIZE;
url_fseek(pb, seq->current_frame_offs, SEEK_SET); url_fseek(pb, seq->current_frame_offs, SEEK_SET);
@ -153,13 +153,18 @@ static int seq_parse_frame_data(SeqDemuxContext *seq, ByteIOContext *pb)
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
if (offset_table[i] != 0) { if (offset_table[i] != 0) {
for (e = i + 1; e < 4 && offset_table[e] == 0; e++); for (e = i + 1; e < 4 && offset_table[e] == 0; e++);
seq_fill_buffer(seq, pb, buffer_num[1 + i], err = seq_fill_buffer(seq, pb, buffer_num[1 + i],
offset_table[i], offset_table[i],
offset_table[e] - offset_table[i]); offset_table[e] - offset_table[i]);
if (err != 0)
return err;
} }
} }
if (buffer_num[0] != 255) { if (buffer_num[0] != 255) {
if (buffer_num[0] >= SEQ_NUM_FRAME_BUFFERS)
return AVERROR_INVALIDDATA;
seq_buffer = &seq->frame_buffers[buffer_num[0]]; seq_buffer = &seq->frame_buffers[buffer_num[0]];
seq->current_video_data_size = seq_buffer->fill_size; seq->current_video_data_size = seq_buffer->fill_size;
seq->current_video_data_ptr = seq_buffer->data; seq->current_video_data_ptr = seq_buffer->data;