[mutter] wayland: Kill clients who try to bind an incompatible gtk_shell version



commit df3b412a254f606a79807e56961b6781fa171c9b
Author: Jonas Ådahl <jadahl gmail com>
Date:   Thu Mar 5 18:09:35 2015 +0800

    wayland: Kill clients who try to bind an incompatible gtk_shell version
    
    gtk_shell is not backward compatible, and clients binding to it should
    check whether the advertised version is the same as the client supports.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=745720

 src/wayland/meta-wayland-surface.c |   11 +++++++++++
 src/wayland/protocol/gtk-shell.xml |    8 ++++++++
 2 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 16173bf..a189e2f 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -1619,6 +1619,17 @@ bind_gtk_shell (struct wl_client *client,
   uint32_t capabilities = 0;
 
   resource = wl_resource_create (client, &gtk_shell_interface, version, id);
+
+  if (version != META_GTK_SHELL_VERSION)
+    {
+      wl_resource_post_error (resource,
+                              WL_DISPLAY_ERROR_INVALID_OBJECT,
+                              "Incompatible gtk-shell version "
+                              "(supported version: %d)",
+                              META_GTK_SHELL_VERSION);
+      return;
+    }
+
   wl_resource_set_implementation (resource, &meta_wayland_gtk_shell_interface, data, NULL);
 
   if (!meta_prefs_get_show_fallback_app_menu ())
diff --git a/src/wayland/protocol/gtk-shell.xml b/src/wayland/protocol/gtk-shell.xml
index a8a83eb..bed61d6 100644
--- a/src/wayland/protocol/gtk-shell.xml
+++ b/src/wayland/protocol/gtk-shell.xml
@@ -1,6 +1,14 @@
 <protocol name="gtk">
 
   <interface name="gtk_shell" version="1">
+    <description summary="gtk specific extensions">
+      gtk_shell is a protocol extension providing additional features for
+      clients implementing it. It is not backward compatible, and a client must
+      always only bind to the specific version it implements. If a client binds
+      to a version different from the version the server provides, an error will
+      be raised.
+    </description>
+
     <enum name="capability">
       <entry name="global_app_menu" value="1"/>
       <entry name="global_menu_bar" value="2"/>


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