Skip to content
Snippets Groups Projects
Commit fc644340 authored by Laurent Aimar's avatar Laurent Aimar Committed by Michael Niedermayer
Browse files

Validate the number of audio channels before using it in wmapro decoder.

parent eb11cca5
No related branches found
No related tags found
No related merge requests found
...@@ -309,10 +309,6 @@ static av_cold int decode_init(AVCodecContext *avctx) ...@@ -309,10 +309,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
s->samples_per_frame = 1 << ff_wma_get_frame_len_bits(avctx->sample_rate, s->samples_per_frame = 1 << ff_wma_get_frame_len_bits(avctx->sample_rate,
3, s->decode_flags); 3, s->decode_flags);
/** init previous block len */
for (i = 0; i < avctx->channels; i++)
s->channel[i].prev_block_len = s->samples_per_frame;
/** subframe info */ /** subframe info */
log2_max_num_subframes = ((s->decode_flags & 0x38) >> 3); log2_max_num_subframes = ((s->decode_flags & 0x38) >> 3);
s->max_num_subframes = 1 << log2_max_num_subframes; s->max_num_subframes = 1 << log2_max_num_subframes;
...@@ -332,6 +328,18 @@ static av_cold int decode_init(AVCodecContext *avctx) ...@@ -332,6 +328,18 @@ static av_cold int decode_init(AVCodecContext *avctx)
s->num_channels = avctx->channels; s->num_channels = avctx->channels;
if (s->num_channels < 0) {
av_log(avctx, AV_LOG_ERROR, "invalid number of channels %d\n", s->num_channels);
return AVERROR_INVALIDDATA;
} else if (s->num_channels > WMAPRO_MAX_CHANNELS) {
av_log_ask_for_sample(avctx, "unsupported number of channels\n");
return AVERROR_PATCHWELCOME;
}
/** init previous block len */
for (i = 0; i < s->num_channels; i++)
s->channel[i].prev_block_len = s->samples_per_frame;
/** extract lfe channel position */ /** extract lfe channel position */
s->lfe_channel = -1; s->lfe_channel = -1;
...@@ -343,14 +351,6 @@ static av_cold int decode_init(AVCodecContext *avctx) ...@@ -343,14 +351,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
} }
} }
if (s->num_channels < 0) {
av_log(avctx, AV_LOG_ERROR, "invalid number of channels %d\n", s->num_channels);
return AVERROR_INVALIDDATA;
} else if (s->num_channels > WMAPRO_MAX_CHANNELS) {
av_log_ask_for_sample(avctx, "unsupported number of channels\n");
return AVERROR_PATCHWELCOME;
}
INIT_VLC_STATIC(&sf_vlc, SCALEVLCBITS, HUFF_SCALE_SIZE, INIT_VLC_STATIC(&sf_vlc, SCALEVLCBITS, HUFF_SCALE_SIZE,
scale_huffbits, 1, 1, scale_huffbits, 1, 1,
scale_huffcodes, 2, 2, 616); scale_huffcodes, 2, 2, 616);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment