@ -390,7 +390,7 @@ static int tdsc_decode_tiles(AVCodecContext *avctx, int number_tiles)
for ( i = 0 ; i < number_tiles ; i + + ) {
int tile_size ;
int tile_mode ;
int x , y , w , h ;
int x , y , x2 , y2 , w , h ;
int ret ;
if ( bytestream2_get_bytes_left ( & ctx - > gbc ) < 4 | |
@ -408,20 +408,19 @@ static int tdsc_decode_tiles(AVCodecContext *avctx, int number_tiles)
bytestream2_skip ( & ctx - > gbc , 4 ) ; // unknown
x = bytestream2_get_le32 ( & ctx - > gbc ) ;
y = bytestream2_get_le32 ( & ctx - > gbc ) ;
w = bytestream2_get_le32 ( & ctx - > gbc ) - x ;
h = bytestream2_get_le32 ( & ctx - > gbc ) - y ;
x2 = bytestream2_get_le32 ( & ctx - > gbc ) ;
y2 = bytestream2_get_le32 ( & ctx - > gbc ) ;
if ( x > = ctx - > width | | y > = ctx - > height ) {
if ( x < 0 | | y < 0 | | x2 < = x | | y2 < = y | |
x2 > ctx - > width | | y2 > ctx - > height
) {
av_log ( avctx , AV_LOG_ERROR ,
" Invalid tile position (%d.%d outside %dx%d). \n " ,
x , y , ctx - > width , ctx - > height ) ;
return AVERROR_INVALIDDATA ;
}
if ( x + w > ctx - > width | | y + h > ctx - > height ) {
av_log ( avctx , AV_LOG_ERROR ,
" Invalid tile size %dx%d \n " , w , h ) ;
" Invalid tile position (%d.%d %d.%d outside %dx%d). \n " ,
x , y , x2 , y2 , ctx - > width , ctx - > height ) ;
return AVERROR_INVALIDDATA ;
}
w = x2 - x ;
h = y2 - y ;
ret = av_reallocp ( & ctx - > tilebuffer , tile_size ) ;
if ( ! ctx - > tilebuffer )