[gtk+/gtk-2-24] Bug 657770 - Write to released memory in gtkdnd-quartz.c



commit 4e64f6012f567edeacf23d3222caa9f809471b16
Author: Kristian Rietveld <kris gtk org>
Date:   Sat Sep 24 17:32:21 2011 -0700

    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

 gtk/gtkdnd-quartz.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c
index f7b82a2..a2dcc1f 100644
--- a/gtk/gtkdnd-quartz.c
+++ b/gtk/gtkdnd-quartz.c
@@ -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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]