@ -1342,7 +1342,7 @@ static int skip_boxes(JXLParseContext *ctx, const uint8_t *buf, int buf_size)
while ( 1 ) {
while ( 1 ) {
uint64_t size ;
uint64_t size ;
int head_size = 4 ;
int head_size = 8 ;
if ( bytestream2_peek_le16 ( & gb ) = = FF_JPEGXL_CODESTREAM_SIGNATURE_LE )
if ( bytestream2_peek_le16 ( & gb ) = = FF_JPEGXL_CODESTREAM_SIGNATURE_LE )
break ;
break ;
@ -1353,16 +1353,17 @@ static int skip_boxes(JXLParseContext *ctx, const uint8_t *buf, int buf_size)
return AVERROR_BUFFER_TOO_SMALL ;
return AVERROR_BUFFER_TOO_SMALL ;
size = bytestream2_get_be32 ( & gb ) ;
size = bytestream2_get_be32 ( & gb ) ;
bytestream2_skip ( & gb , 4 ) ; // tag
if ( size = = 1 ) {
if ( size = = 1 ) {
if ( bytestream2_get_bytes_left ( & gb ) < 12 )
if ( bytestream2_get_bytes_left ( & gb ) < 8 )
return AVERROR_BUFFER_TOO_SMALL ;
return AVERROR_BUFFER_TOO_SMALL ;
size = bytestream2_get_be64 ( & gb ) ;
size = bytestream2_get_be64 ( & gb ) ;
head_size = 12 ;
head_size = 16 ;
}
}
if ( ! size )
if ( ! size )
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
/* invalid ISOBMFF size */
/* invalid ISOBMFF size */
if ( size < = head_size + 4 | | size > INT_MAX - ctx - > skip )
if ( size < = head_size | | size > INT_MAX - ctx - > skip )
return AVERROR_INVALIDDATA ;
return AVERROR_INVALIDDATA ;
ctx - > skip + = size ;
ctx - > skip + = size ;