[FFmpeg-cvslog] r18649 - in trunk/libavcodec: mlp.h mlpdec.c
ramiro
subversion
Wed Apr 22 00:12:30 CEST 2009
Author: ramiro
Date: Wed Apr 22 00:12:30 2009
New Revision: 18649
Log:
mlpdec: Validate max_channel and max_matrix_channel.
Modified:
trunk/libavcodec/mlp.h
trunk/libavcodec/mlpdec.c
Modified: trunk/libavcodec/mlp.h
==============================================================================
--- trunk/libavcodec/mlp.h Tue Apr 21 23:57:23 2009 (r18648)
+++ trunk/libavcodec/mlp.h Wed Apr 22 00:12:30 2009 (r18649)
@@ -26,6 +26,9 @@
#include "avcodec.h"
+/** Last possible matrix channel for each codec */
+#define MAX_MATRIX_CHANNEL_MLP 5
+#define MAX_MATRIX_CHANNEL_TRUEHD 7
/** Maximum number of channels that can be decoded. */
#define MAX_CHANNELS 16
Modified: trunk/libavcodec/mlpdec.c
==============================================================================
--- trunk/libavcodec/mlpdec.c Tue Apr 21 23:57:23 2009 (r18648)
+++ trunk/libavcodec/mlpdec.c Wed Apr 22 00:12:30 2009 (r18649)
@@ -335,6 +335,9 @@ static int read_restart_header(MLPDecode
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 @@ static int read_restart_header(MLPDecode
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");
More information about the ffmpeg-cvslog
mailing list