Add patch from upstream to fix crashes in X11 drag & drop

This adds a missing error trap to prevent crashes. The X11 functions
called here cannot normally fail, but it seems they can fail in certain
configurations of the NVIDIA proprietary driver.

LP: #1911036
This commit is contained in:
Simon McVittie 2021-04-21 10:46:09 +01:00
parent 14aa29ea25
commit 6d65f347da
2 changed files with 37 additions and 0 deletions

View File

@ -1,6 +1,7 @@
gdk-wayland-Mark-matched-settings-from-the-portal-as-vali.patch
gdk-wayland-Look-for-font-settings-recursively.patch
updateiconcache-Sort-list-of-entries.patch
x11-dnd-Ignore-XErrors-from-the-COW.patch
gdk-Don-t-distribute-generated-files-in-tarballs.patch
gtk-Really-don-t-distribute-built-files.patch
demos-examples-tests-Don-t-distribute-built-files.patch

View File

@ -0,0 +1,36 @@
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Mon, 22 Mar 2021 15:19:33 +0100
Subject: x11/dnd: Ignore XErrors from the COW
The DnD code for X11 adds the composite overlay window (aka COW) to the
cache.
Yet the X11 requests to get and release the COW may trigger XErrors that
we ought to ignore otherwise the client will abort.
Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3715
Bug-Ubuntu: https://launchpad.net/bugs/1911036
Origin: upstream, 3.24.28, commit:39db78470452cf0b1a7d1ee196de3f20eea85d33
---
gdk/x11/gdkdnd-x11.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c
index e07fa10..113d0a8 100644
--- a/gdk/x11/gdkdnd-x11.c
+++ b/gdk/x11/gdkdnd-x11.c
@@ -634,12 +634,14 @@ gdk_window_cache_new (GdkScreen *screen)
*/
if (gdk_screen_is_composited (screen))
{
+ gdk_x11_display_error_trap_push (GDK_X11_SCREEN (screen)->display);
cow = XCompositeGetOverlayWindow (xdisplay, GDK_WINDOW_XID (root_window));
gdk_window_cache_add (result, cow, 0, 0,
gdk_x11_screen_get_width (screen) * GDK_X11_SCREEN(screen)->window_scale,
gdk_x11_screen_get_height (screen) * GDK_X11_SCREEN(screen)->window_scale,
TRUE);
XCompositeReleaseOverlayWindow (xdisplay, GDK_WINDOW_XID (root_window));
+ gdk_x11_display_error_trap_pop_ignored (GDK_X11_SCREEN (screen)->display);
}
#endif