Mercurial > libavcodec.hg
diff mlpdec.c @ 9531:19a70bcc2220 libavcodec
mlpdec: Validate max_channel and max_matrix_channel.
author | ramiro |
---|---|
date | Tue, 21 Apr 2009 22:12:30 +0000 |
parents | dbb16aa52d43 |
children | 2aabf1a58f19 |
line wrap: on
line diff
--- a/mlpdec.c Tue Apr 21 21:57:23 2009 +0000 +++ b/mlpdec.c Tue Apr 21 22:12:30 2009 +0000 @@ -335,6 +335,9 @@ uint8_t checksum; uint8_t lossless_check; int start_count = get_bits_count(gbp); + const int max_matrix_channel = m->avctx->codec_id == CODEC_ID_MLP + ? MAX_MATRIX_CHANNEL_MLP + : MAX_MATRIX_CHANNEL_TRUEHD; sync_word = get_bits(gbp, 13); s->noise_type = get_bits1(gbp); @@ -352,6 +355,19 @@ s->max_channel = get_bits(gbp, 4); s->max_matrix_channel = get_bits(gbp, 4); + if (s->max_matrix_channel > max_matrix_channel) { + av_log(m->avctx, AV_LOG_ERROR, + "Max matrix channel cannot be greater than %d.\n", + max_matrix_channel); + return -1; + } + + if (s->max_channel != s->max_matrix_channel) { + av_log(m->avctx, AV_LOG_ERROR, + "Max channel must be equal max matrix channel.\n"); + return -1; + } + if (s->min_channel > s->max_channel) { av_log(m->avctx, AV_LOG_ERROR, "Substream min channel cannot be greater than max channel.\n");