 40f2af665d
			
		
	
	40f2af665d
	
	
	
		
			
			Don't try to paint onto an error surface. This happens for example when gdk_cairo_set_source_pixbuf() is called with a pixbuf that is too big for Cairo to handle. Spotted by Christian Boxdörfer
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <gdk/gdk.h>
 | |
| 
 | |
| static void
 | |
| test_set_source_big_pixbuf (void)
 | |
| {
 | |
|   cairo_surface_t *surface;
 | |
|   GdkPixbuf *pixbuf;
 | |
|   cairo_t *cr;
 | |
| 
 | |
| #define WAY_TOO_BIG 65540
 | |
| 
 | |
|   /* Check that too big really is to big.
 | |
|    * If this check fails, somebody improved Cairo and this test is useless.
 | |
|    */
 | |
|   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, WAY_TOO_BIG, 1);
 | |
|   g_assert_cmpint (cairo_surface_status (surface), !=, CAIRO_STATUS_SUCCESS);
 | |
|   cairo_surface_destroy (surface);
 | |
| 
 | |
|   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 10, 10);
 | |
|   cr = cairo_create (surface);
 | |
|   pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, WAY_TOO_BIG, 1);
 | |
| 
 | |
|   gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
 | |
|   g_assert_cmpint (cairo_status (cr), !=, CAIRO_STATUS_SUCCESS);
 | |
| 
 | |
|   g_object_unref (pixbuf);
 | |
|   cairo_destroy (cr);
 | |
|   cairo_surface_destroy (surface);
 | |
| }
 | |
| 
 | |
| int
 | |
| main (int argc, char *argv[])
 | |
| {
 | |
|   g_test_init (&argc, &argv, NULL);
 | |
|   gdk_init (&argc, &argv);
 | |
| 
 | |
|   g_test_add_func ("/drawing/set-source-big-pixbuf", test_set_source_big_pixbuf);
 | |
| 
 | |
|   return g_test_run ();
 | |
| }
 |