Package: libgtk2.0-0 Version: 2.12.12-1~lenny1 Severity: important
Hi to all Debian-GTK-maintainers, using Debian Lenny in a production environment, we're faced with the problem reported by Sebastien Bacher here: https://bugzilla.gnome.org/show_bug.cgi?id=591434 (In conjunction with a custom thunderbird 3.0.4 build). The Debian package seems to have the patch applied since GTK+ version 2.17.x, but our responsible admin prefers to use packages from stable because of the high number of users that would be affected by a broken GTK or whatever here. So my question is this: Could this patch be applied to libgtk2.0-0 in Debian Lenny? I think it is very small and other programs like gedit seem to be affected, too. For your convenience, to give you a quick view, I've attached the git log of the commitment to GTK+ I'm concerned about to this mail. Thank you very much for having a look Nicolai Stange -- System Information: Debian Release: 5.0.4 APT prefers stable APT policy: (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.26-2-amd64 (SMP w/1 CPU core) Locale: LANG=en_US.ISO8859-1, LC_CTYPE=en_US.ISO8859-1 (charmap=ISO-8859-1) (ignored: LC_ALL set to en_US.ISO8859-1) Shell: /bin/sh linked to /bin/bash Versions of packages libgtk2.0-0 depends on: ii libatk1.0-0 1.22.0-1 The ATK accessibility toolkit ii libc6 2.7-18lenny2 GNU C Library: Shared libraries ii libcairo2 1.6.4-7 The Cairo 2D vector graphics libra ii libcomerr2 1.41.3-1 common error description library ii libcups2 1.3.8-1+lenny8 Common UNIX Printing System(tm) - ii libfontconfig1 2.6.0-3 generic font configuration library ii libglib2.0-0 2.16.6-3 The GLib library of C routines ii libgnutls26 2.4.2-6+lenny2 the GNU TLS library - runtime libr ii libgtk2.0-commo 2.12.12-1~lenny1 Common files for the GTK+ graphica ii libjpeg62 6b-14 The Independent JPEG Group's JPEG ii libkrb53 1.6.dfsg.4~beta1-5lenny3 MIT Kerberos runtime libraries ii libpango1.0-0 1.20.5-5+lenny1 Layout and rendering of internatio ii libpng12-0 1.2.27-2+lenny3 PNG library - runtime ii libtiff4 3.8.2-11.2 Tag Image File Format (TIFF) libra ii libx11-6 2:1.1.5-2 X11 client-side library ii libxcomposite1 1:0.4.0-3 X11 Composite extension library ii libxcursor1 1:1.1.9-1 X cursor management library ii libxdamage1 1:1.1.1-4 X11 damaged region extension libra ii libxext6 2:1.0.4-1 X11 miscellaneous extension librar ii libxfixes3 1:4.0.3-2 X11 miscellaneous 'fixes' extensio ii libxi6 2:1.1.4-1 X11 Input extension library ii libxinerama1 2:1.0.3-2 X11 Xinerama extension library ii libxrandr2 2:1.2.3-1 X11 RandR extension library ii libxrender1 1:0.9.4-2 X Rendering Extension client libra ii zlib1g 1:1.2.3.3.dfsg-12 compression library - runtime Versions of packages libgtk2.0-0 recommends: ii hicolor-icon-theme 0.10-1 default fallback theme for FreeDes ii libgtk2.0-bin 2.12.12-1~lenny1 The programs for the GTK+ graphica Versions of packages libgtk2.0-0 suggests: ii librsvg2-common 2.22.2-2lenny1 SAX-based renderer library for SVG -- no debconf information
commit 9f822431970b9744f0184ae2d9e9977f607ffe4e Author: Alexander Larsson <[email protected]> Date: Thu Aug 13 17:00:00 2009 +0200 Make _gdk_window_process_updates_recurse reentrancy safe Apps may change the window hierarchy while recursing over it by destroying windows from the expose event handler. We need to copy the children list and ref all the children while recursing. This fixes some crashers in gedit (bug #589367, bug #591434) diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index ba4ad63..e9c5512 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -4751,17 +4751,21 @@ _gdk_window_process_updates_recurse (GdkWindow *window, GdkWindowObject *child; GdkRegion *child_region; GdkRectangle r; - GList *l; + GList *l, *children; if (gdk_region_empty (expose_region)) return; + /* Make this reentrancy safe for expose handlers freeing windows */ + children = g_list_copy (private->children); + g_list_foreach (children, g_object_ref, NULL); + /* Iterate over children, starting at topmost */ - for (l = private->children; l != NULL; l = l->next) + for (l = children; l != NULL; l = l->next) { child = l->data; - if (!GDK_WINDOW_IS_MAPPED (child) || child->input_only || child->composited) + if (child->destroyed || !GDK_WINDOW_IS_MAPPED (child) || child->input_only || child->composited) continue; /* Ignore offscreen children, as they don't draw in their parent and @@ -4799,6 +4803,9 @@ _gdk_window_process_updates_recurse (GdkWindow *window, gdk_region_destroy (child_region); } + g_list_foreach (children, g_object_unref, NULL); + g_list_free (children); + if (!gdk_region_empty (expose_region)) { if (private->event_mask & GDK_EXPOSURE_MASK)

