From 8bb7d97be0cda3c944956c79c50d0cf6f1efb7b9 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 16 Jan 2011 18:22:29 +0000 Subject: Check 4xm headers for validity. This should avoid 1/0. Originally committed as revision 26392 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/4xm.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'libavformat/4xm.c') diff --git a/libavformat/4xm.c b/libavformat/4xm.c index a697f8de8d..dfbf0327f5 100644 --- a/libavformat/4xm.c +++ b/libavformat/4xm.c @@ -185,6 +185,13 @@ static int fourxm_read_header(AVFormatContext *s, fourxm->tracks[current_track].sample_rate = AV_RL32(&header[i + 40]); fourxm->tracks[current_track].bits = AV_RL32(&header[i + 44]); fourxm->tracks[current_track].audio_pts = 0; + if( fourxm->tracks[current_track].channels <= 0 + || fourxm->tracks[current_track].sample_rate <= 0 + || fourxm->tracks[current_track].bits < 0){ + av_log(s, AV_LOG_ERROR, "audio header invalid\n"); + ret= -1; + goto fail; + } i += 8 + size; /* allocate a new AVStream */ @@ -291,7 +298,7 @@ static int fourxm_read_packet(AVFormatContext *s, out_size= get_le32(pb); size-=8; - if (track_number < fourxm->track_count) { + if (track_number < fourxm->track_count && fourxm->tracks[track_number].channels>0) { ret= av_get_packet(s->pb, pkt, size); if(ret<0) return AVERROR(EIO); -- cgit v1.2.3