webpsave: switch to g_try_malloc() and limit WebP output dimensions (#3094)
* webpsave: switch to g_try_malloc() * webpsave: add dimensions limit check * output the amount of memory requested on malloc error
This commit is contained in:
parent
b661f4bc27
commit
9c2accf831
@ -647,6 +647,13 @@ vips_foreign_save_webp_build( VipsObject *object )
|
|||||||
build( object ) )
|
build( object ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
page_height = vips_image_get_page_height( save->ready );
|
||||||
|
if( save->ready->Xsize > 16383 || page_height > 16383 ) {
|
||||||
|
vips_error( "webpsave", _( "image too large" ) );
|
||||||
|
vips_foreign_save_webp_unset( webp );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
/* We need a copy of the input image in case we change the metadata
|
/* We need a copy of the input image in case we change the metadata
|
||||||
* eg. in vips__exif_update().
|
* eg. in vips__exif_update().
|
||||||
*/
|
*/
|
||||||
@ -655,12 +662,15 @@ vips_foreign_save_webp_build( VipsObject *object )
|
|||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
page_height = vips_image_get_page_height( webp->image );
|
|
||||||
|
|
||||||
/* RGB(A) frame as a contiguous buffer.
|
/* RGB(A) frame as a contiguous buffer.
|
||||||
*/
|
*/
|
||||||
webp->frame_bytes = g_malloc( (size_t) webp->image->Bands *
|
size_t frame_size = (size_t) webp->image->Bands * webp->image->Xsize * page_height;
|
||||||
webp->image->Xsize * page_height );
|
webp->frame_bytes = g_try_malloc( frame_size );
|
||||||
|
if( webp->frame_bytes == NULL ) {
|
||||||
|
vips_error( "webpsave", _( "failed to allocate %zu bytes" ), frame_size );
|
||||||
|
vips_foreign_save_webp_unset( webp );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
/* Init generic WebP config
|
/* Init generic WebP config
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user