@ -43,6 +43,7 @@
# define SMKTREE_BITS 9
# define SMKTREE_BITS 9
# define SMK_NODE 0x80000000
# define SMK_NODE 0x80000000
# define SMKTREE_DECODE_MAX_RECURSION 32
typedef struct SmackVContext {
typedef struct SmackVContext {
AVCodecContext * avctx ;
AVCodecContext * avctx ;
@ -95,10 +96,11 @@ enum SmkBlockTypes {
*/
*/
static int smacker_decode_tree ( GetBitContext * gb , HuffContext * hc , uint32_t prefix , int length )
static int smacker_decode_tree ( GetBitContext * gb , HuffContext * hc , uint32_t prefix , int length )
{
{
if ( length > 32 | | length > 3 * SMKTREE_BITS ) {
if ( length > SMKTREE_DECODE_MAX_RECURSION | | length > 3 * SMKTREE_BITS ) {
av_log ( NULL , AV_LOG_ERROR , " length too long \n " ) ;
av_log ( NULL , AV_LOG_ERROR , " Maximum tree recursion level exceeded. \n " ) ;
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
}
}
if ( ! get_bits1 ( gb ) ) { //Leaf
if ( ! get_bits1 ( gb ) ) { //Leaf
if ( hc - > current > = hc - > length ) {
if ( hc - > current > = hc - > length ) {
av_log ( NULL , AV_LOG_ERROR , " Tree size exceeded! \n " ) ;
av_log ( NULL , AV_LOG_ERROR , " Tree size exceeded! \n " ) ;