[arch-commits] CVS update of extra/x11/xorg-server (xkb-fixes.patch)

Jan de Groot jgc at archlinux.org
Sun Mar 23 11:20:19 UTC 2008


    Date: Sunday, March 23, 2008 @ 07:20:19
  Author: jgc
    Path: /home/cvs-extra/extra/x11/xorg-server

   Added: xkb-fixes.patch (1.1)

Add fix for XKB crashes when XkbModel is set


-----------------+
 xkb-fixes.patch |  132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 132 insertions(+)


Index: extra/x11/xorg-server/xkb-fixes.patch
diff -u /dev/null extra/x11/xorg-server/xkb-fixes.patch:1.1
--- /dev/null	Sun Mar 23 07:20:19 2008
+++ extra/x11/xorg-server/xkb-fixes.patch	Sun Mar 23 07:20:18 2008
@@ -0,0 +1,132 @@
+From: Peter Hutterer <peter at cs.unisa.edu.au>
+Date: Tue, 5 Feb 2008 05:31:56 +0000 (+1030)
+Subject: xkb: when copying sections, make sure num_rows is set too.
+X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=41991fb991313202e8e6b513fe928ba14f8fcb87
+
+xkb: when copying sections, make sure num_rows is set too.
+---
+
+--- a/xkb/xkbUtils.c
++++ b/xkb/xkbUtils.c
+@@ -1806,6 +1806,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+                         return FALSE;
+                     dsection->rows = tmp;
+                 }
++                dsection->num_rows = ssection->num_rows;
+                 for (j = 0, srow = ssection->rows, drow = dsection->rows;
+                      j < ssection->num_rows;
+                      j++, srow++, drow++) {
+From: Peter Hutterer <peter at cs.unisa.edu.au>
+Date: Thu, 7 Feb 2008 05:18:04 +0000 (+1030)
+Subject: xkb: when copying the keymap, make sure the structs default to 0/NULL.
+X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=7018f280406eb0ef899a4046de274cfdd582881b
+
+xkb: when copying the keymap, make sure the structs default to 0/NULL.
+
+It actually does help if a pointer is NULL rather than pointing to nirvana
+when you're trying to free it lateron. Who would have thought?
+---
+
+--- a/xkb/xkbUtils.c
++++ b/xkb/xkbUtils.c
+@@ -1730,9 +1730,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+         else {
+             if (dst->geom->sz_shapes) {
+                 xfree(dst->geom->shapes);
+-                dst->geom->shapes = NULL;
+             }
+-            
++            dst->geom->shapes = NULL;
+             dst->geom->num_shapes = 0;
+             dst->geom->sz_shapes = 0;
+         }
+@@ -1781,6 +1780,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+             }
+ 
+             dst->geom->num_sections = 0;
++            dst->geom->sections = NULL;
+         }
+ 
+         if (src->geom->num_sections) {
+@@ -1792,6 +1792,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+                 tmp = xalloc(src->geom->num_sections * sizeof(XkbSectionRec));
+             if (!tmp)
+                 return FALSE;
++            memset(tmp, 0, src->geom->num_sections * sizeof(XkbSectionRec));
+             dst->geom->sections = tmp;
+             dst->geom->num_sections = src->geom->num_sections;
+ 
+@@ -1828,6 +1829,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+                         return FALSE;
+                     dsection->doodads = tmp;
+                 }
++                else {
++                    dsection->doodads = NULL;
++                }
++
+                 for (k = 0,
+                       sdoodad = ssection->doodads,
+                       ddoodad = dsection->doodads;
+@@ -1855,9 +1860,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+         else {
+             if (dst->geom->sz_sections) {
+                 xfree(dst->geom->sections);
+-                dst->geom->sections = NULL;
+             }
+ 
++            dst->geom->sections = NULL;
+             dst->geom->num_sections = 0;
+             dst->geom->sz_sections = 0;
+         }
+@@ -1886,6 +1891,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+                     }
+                 }
+             }
++            dst->geom->num_doodads = 0;
++            dst->geom->doodads = NULL;
+         }
+ 
+         if (src->geom->num_doodads) {
+@@ -1898,7 +1905,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+                               sizeof(XkbDoodadRec));
+             if (!tmp)
+                 return FALSE;
+-            bzero(tmp, src->geom->num_doodads * sizeof(XkbDoodadRec));
++            memset(tmp, 0, src->geom->num_doodads * sizeof(XkbDoodadRec));
+             dst->geom->doodads = tmp;
+ 
+             dst->geom->sz_doodads = src->geom->num_doodads;
+@@ -1927,9 +1934,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+         else {
+             if (dst->geom->sz_doodads) {
+                 xfree(dst->geom->doodads);
+-                dst->geom->doodads = NULL;
+             }
+ 
++            dst->geom->doodads = NULL;
+             dst->geom->num_doodads = 0;
+             dst->geom->sz_doodads = 0;
+         }
+@@ -1957,10 +1964,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+             dst->geom->num_key_aliases = dst->geom->sz_key_aliases;
+         }
+         else {
+-            if (dst->geom->sz_key_aliases && dst->geom->key_aliases) {
++            if (dst->geom->key_aliases) {
+                 xfree(dst->geom->key_aliases);
+-                dst->geom->key_aliases = NULL;
+             }
++            dst->geom->key_aliases = NULL;
+             dst->geom->num_key_aliases = 0;
+             dst->geom->sz_key_aliases = 0;
+         }
+@@ -1991,8 +1998,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
+         else {
+             if (dst->geom->label_font) {
+                 xfree(dst->geom->label_font);
+-                dst->geom->label_font = NULL;
+             }
++            dst->geom->label_font = NULL;
+             dst->geom->label_color = NULL;
+             dst->geom->base_color = NULL;
+         }




More information about the arch-commits mailing list