@ -729,8 +729,7 @@ static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitCo
av_log ( m - > avctx , AV_LOG_ERROR ,
av_log ( m - > avctx , AV_LOG_ERROR ,
" Number of primitive matrices cannot be greater than %d. \n " ,
" Number of primitive matrices cannot be greater than %d. \n " ,
max_primitive_matrices ) ;
max_primitive_matrices ) ;
s - > num_primitive_matrices = 0 ;
goto error ;
return AVERROR_INVALIDDATA ;
}
}
for ( mat = 0 ; mat < s - > num_primitive_matrices ; mat + + ) {
for ( mat = 0 ; mat < s - > num_primitive_matrices ; mat + + ) {
@ -743,12 +742,12 @@ static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitCo
av_log ( m - > avctx , AV_LOG_ERROR ,
av_log ( m - > avctx , AV_LOG_ERROR ,
" Invalid channel %d specified as output from matrix. \n " ,
" Invalid channel %d specified as output from matrix. \n " ,
s - > matrix_out_ch [ mat ] ) ;
s - > matrix_out_ch [ mat ] ) ;
return AVERROR_INVALIDDATA ;
goto error ;
}
}
if ( frac_bits > 14 ) {
if ( frac_bits > 14 ) {
av_log ( m - > avctx , AV_LOG_ERROR ,
av_log ( m - > avctx , AV_LOG_ERROR ,
" Too many fractional bits specified. \n " ) ;
" Too many fractional bits specified. \n " ) ;
return AVERROR_INVALIDDATA ;
goto error ;
}
}
max_chan = s - > max_matrix_channel ;
max_chan = s - > max_matrix_channel ;
@ -770,6 +769,11 @@ static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitCo
}
}
return 0 ;
return 0 ;
error :
s - > num_primitive_matrices = 0 ;
memset ( s - > matrix_out_ch , 0 , sizeof ( s - > matrix_out_ch ) ) ;
return AVERROR_INVALIDDATA ;
}
}
/** Read channel parameters. */
/** Read channel parameters. */