From e88e5f0d2a051d6d0d3c491fb689ba9c03419caf Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 21 Sep 2022 20:06:49 +0200 Subject: [PATCH] text: simplify check for 32k pixel limit (#3057) --- libvips/create/text.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libvips/create/text.c b/libvips/create/text.c index 2766f42f..3ac60db1 100644 --- a/libvips/create/text.c +++ b/libvips/create/text.c @@ -348,6 +348,7 @@ vips_text_build( VipsObject *object ) VipsImage *image; cairo_surface_t *surface; cairo_t *cr; + cairo_status_t status; if( VIPS_OBJECT_CLASS( vips_text_parent_class )->build( object ) ) return( -1 ); @@ -417,15 +418,6 @@ vips_text_build( VipsObject *object ) return( -1 ); } - /* Cairo can't go over 32k pixels. - */ - if( extents.width >= 32768 || - extents.height >= 32768 ) { - vips_error( class->nickname, - "%s", _( "text image too large" ) ); - return( -1 ); - } - image = t[0] = vips_image_new_memory(); vips_image_init_fields( image, extents.width, extents.height, 4, @@ -444,6 +436,15 @@ vips_text_build( VipsObject *object ) CAIRO_FORMAT_ARGB32, image->Xsize, image->Ysize, VIPS_IMAGE_SIZEOF_LINE( image ) ); + + status = cairo_surface_status( surface ); + if( status ) { + cairo_surface_destroy( surface ); + vips_error( class->nickname, + "%s", cairo_status_to_string( status ) ); + return( -1 ); + } + cr = cairo_create( surface ); cairo_surface_destroy( surface );