broadway: Don't create overlarge images
authorMatthias Clasen <mclasen@redhat.com>
Sat, 16 May 2020 15:27:21 +0000 (11:27 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 16 May 2020 15:27:21 +0000 (11:27 -0400)
Respect that cairo won't create image surfaces larger
than 32767 x 32767.

This makes the one reftest pass that specifically checks
this condition, treeview-crash-too-wide.

gsk/broadway/gskbroadwayrenderer.c

index 2144a4b63d8f77b816c00c3a25d62604b8824d18..df5028169e954d2d5329d450ddc7878fe41a7e45 100644 (file)
@@ -756,7 +756,14 @@ gsk_broadway_renderer_add_node (GskRenderer *renderer,
       int height = ceil (node->bounds.origin.y + node->bounds.size.height) - y;
       int scale = broadway_display->scale_factor;
 
-      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width * scale, height * scale);
+#define MAX_IMAGE_SIZE 32767
+
+      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                            MIN (width * scale, MAX_IMAGE_SIZE),
+                                            MIN (height * scale, MAX_IMAGE_SIZE));
+
+#undef MAX_IMAGE_SIZE
+
       cr = cairo_create (surface);
       cairo_scale (cr, scale, scale);
       cairo_translate (cr, -x, -y);