# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1301117041 0 # Node ID c17634e2b303cc09790cb63275a2e38fd7b90391 # Parent 2d0681b8d8f60e71b01f352e0524f22cc28acf02 More safety checks in the drawing functions. diff -r 2d0681b8d8f6 -r c17634e2b303 gtk3/dw.c --- a/gtk3/dw.c Sat Mar 26 05:14:54 2011 +0000 +++ b/gtk3/dw.c Sat Mar 26 05:24:01 2011 +0000 @@ -6591,7 +6591,16 @@ DW_MUTEX_LOCK; if(handle) - cr = gdk_cairo_create(gtk_widget_get_window(handle)); + { + GdkWindow *window = gtk_widget_get_window(handle); + /* Safety check for non-existant windows */ + if(!window || !GDK_IS_WINDOW(window)) + { + DW_MUTEX_UNLOCK; + return; + } + cr = gdk_cairo_create(window); + } else if(pixmap) cr = cairo_create(pixmap->image); if(cr) @@ -6623,7 +6632,16 @@ DW_MUTEX_LOCK; if(handle) - cr = gdk_cairo_create(gtk_widget_get_window(handle)); + { + GdkWindow *window = gtk_widget_get_window(handle); + /* Safety check for non-existant windows */ + if(!window || !GDK_IS_WINDOW(window)) + { + DW_MUTEX_UNLOCK; + return; + } + cr = gdk_cairo_create(window); + } else if(pixmap) cr = cairo_create(pixmap->image); if(cr) @@ -6657,7 +6675,16 @@ DW_MUTEX_LOCK; if(handle) - cr = gdk_cairo_create(gtk_widget_get_window(handle)); + { + GdkWindow *window = gtk_widget_get_window(handle); + /* Safety check for non-existant windows */ + if(!window || !GDK_IS_WINDOW(window)) + { + DW_MUTEX_UNLOCK; + return; + } + cr = gdk_cairo_create(window); + } else if(pixmap) cr = cairo_create(pixmap->image); if(cr) @@ -6696,7 +6723,16 @@ DW_MUTEX_LOCK; if(handle) - cr = gdk_cairo_create(gtk_widget_get_window(handle)); + { + GdkWindow *window = gtk_widget_get_window(handle); + /* Safety check for non-existant windows */ + if(!window || !GDK_IS_WINDOW(window)) + { + DW_MUTEX_UNLOCK; + return; + } + cr = gdk_cairo_create(window); + } else if(pixmap) cr = cairo_create(pixmap->image); if(cr) @@ -6738,7 +6774,14 @@ DW_MUTEX_LOCK; if(handle) { - cr = gdk_cairo_create(gtk_widget_get_window(handle)); + GdkWindow *window = gtk_widget_get_window(handle); + /* Safety check for non-existant windows */ + if(!window || !GDK_IS_WINDOW(window)) + { + DW_MUTEX_UNLOCK; + return; + } + cr = gdk_cairo_create(window); fontname = (char *)g_object_get_data(G_OBJECT(handle), "_dw_fontname"); } else if(pixmap) @@ -7043,6 +7086,7 @@ DW_MUTEX_LOCK; g_object_unref(G_OBJECT(pixmap->pixbuf)); + cairo_surface_destroy(pixmap->image); free(pixmap); DW_MUTEX_UNLOCK; } @@ -7076,7 +7120,16 @@ DW_MUTEX_LOCK; if(dest) - cr = gdk_cairo_create(gtk_widget_get_window(dest)); + { + GdkWindow *window = gtk_widget_get_window(dest); + /* Safety check for non-existant windows */ + if(!window || !GDK_IS_WINDOW(window)) + { + DW_MUTEX_UNLOCK; + return; + } + cr = gdk_cairo_create(window); + } else if(destp) cr = cairo_create(destp->image);