@ -381,6 +381,12 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
w = bytestream2_get_be16 ( gb ) ;
h = bytestream2_get_be16 ( gb ) ;
enc = bytestream2_get_be32 ( gb ) ;
if ( ( dx + w > c - > width ) | | ( dy + h > c - > height ) ) {
av_log ( avctx , AV_LOG_ERROR ,
" Incorrect frame size: %ix%i+%ix%i of %ix%i \n " ,
w , h , dx , dy , c - > width , c - > height ) ;
return AVERROR_INVALIDDATA ;
}
outptr = c - > pic - > data [ 0 ] + dx * c - > bpp2 + dy * c - > pic - > linesize [ 0 ] ;
size_left = bytestream2_get_bytes_left ( gb ) ;
switch ( enc ) {
@ -458,12 +464,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
bytestream2_skip ( gb , 2 ) ;
break ;
case 0x00000000 : // raw rectangle data
if ( ( dx + w > c - > width ) | | ( dy + h > c - > height ) ) {
av_log ( avctx , AV_LOG_ERROR ,
" Incorrect frame size: %ix%i+%ix%i of %ix%i \n " ,
w , h , dx , dy , c - > width , c - > height ) ;
return AVERROR_INVALIDDATA ;
}
if ( size_left < w * h * c - > bpp2 ) {
av_log ( avctx , AV_LOG_ERROR ,
" Premature end of data! (need %i got %i) \n " ,
@ -474,12 +474,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
c - > pic - > linesize [ 0 ] ) ;
break ;
case 0x00000005 : // HexTile encoded rectangle
if ( ( dx + w > c - > width ) | | ( dy + h > c - > height ) ) {
av_log ( avctx , AV_LOG_ERROR ,
" Incorrect frame size: %ix%i+%ix%i of %ix%i \n " ,
w , h , dx , dy , c - > width , c - > height ) ;
return AVERROR_INVALIDDATA ;
}
res = decode_hextile ( c , outptr , gb , w , h , c - > pic - > linesize [ 0 ] ) ;
if ( res < 0 )
return res ;