summaryrefslogtreecommitdiff
path: root/libavformat/4xm.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-01-16 18:22:29 +0000
committerMichael Niedermayer <michaelni@gmx.at>2011-01-16 18:22:29 +0000
commit8bb7d97be0cda3c944956c79c50d0cf6f1efb7b9 (patch)
tree25c0e44f13abf4eded22fc694f2cf0e0a0b28f08 /libavformat/4xm.c
parent30876e391731c8ae61402c4ea4df61af11292223 (diff)
Check 4xm headers for validity. This should avoid 1/0.
Originally committed as revision 26392 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/4xm.c')
-rw-r--r--libavformat/4xm.c9
1 files changed, 8 insertions, 1 deletions
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);