Bug 657770 - Write to released memory in gtkdnd-quartz.c

Clear the Drag paste board just before the info->context is released.
This way the GtkDragSourceOwner is released just before the drag context
is and thus can pasteboard:provideDataForType: not accidentally access
an already released drag context
This commit is contained in:
Kristian Rietveld
2011-09-24 17:32:21 -07:00
committed by John Ralls
parent 94fc15ad95
commit 4e64f6012f

View File

@@ -1836,6 +1836,9 @@ gtk_drag_set_default_icon (GdkColormap *colormap,
static void
gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
{
NSPasteboard *pasteboard;
NSAutoreleasePool *pool;
if (info->icon_pixbuf)
g_object_unref (info->icon_pixbuf);
@@ -1850,10 +1853,21 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
gtk_target_list_unref (info->target_list);
pool = [[NSAutoreleasePool alloc] init];
/* Empty the pasteboard, so that it will not accidentally access
* info->context after it has been destroyed.
*/
pasteboard = [NSPasteboard pasteboardWithName: NSDragPboard];
[pasteboard declareTypes: nil owner: nil];
[pool relase];
gtk_drag_clear_source_info (info->context);
g_object_unref (info->context);
g_free (info);
info = NULL;
}
static gboolean