[caribou] xadapter: Avoid a crash when Xkl doesn't know the real xkb groups



commit 2f98dddef6b85fd25e26778e6455cd6a4aeb34af
Author: Rui Matos <tiagomatos gmail com>
Date:   Wed Oct 7 17:53:03 2015 +0200

    xadapter: Avoid a crash when Xkl doesn't know the real xkb groups
    
    Xkl.ConfigRec gets its layouts and variants from the _XKB_RULES_NAMES
    root window property which isn't specified anywhere and in fact
    doesn't get set under Xwayland. The group index though is accurate
    which means that we might end up trying to access an invalid index on
    the layouts or variants array and crashing.
    
    Avoid this by just lying to the caller since we can't obtain the real
    layout/variant names in that case. Since this only happens under
    Xwayland and in that case the only consumer of this API is gnome-shell
    which ends up not using the names, this should be safe.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=756194

 libcaribou/xadapter.vala |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/libcaribou/xadapter.vala b/libcaribou/xadapter.vala
index e786c66..22858b7 100644
--- a/libcaribou/xadapter.vala
+++ b/libcaribou/xadapter.vala
@@ -301,8 +301,17 @@ namespace Caribou {
                                        out string variant_name) {
             Xkl.ConfigRec config_rec = new Xkl.ConfigRec ();
             config_rec.get_from_server (this.xkl_engine);
-            group_name = config_rec.layouts[this.group];
-            variant_name = config_rec.variants[this.group];
+
+            if (this.group < config_rec.layouts.length)
+                group_name = config_rec.layouts[this.group];
+            else
+                group_name = "";
+
+            if (this.group < config_rec.variants.length)
+                variant_name = config_rec.variants[this.group];
+            else
+                variant_name = "";
+
             if (variant_name == null)
                 variant_name = "";
 


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