[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