From 3a59237f85bf9139ec0191f5f2a496bf631c1e5c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ch=C3=AD-Thanh=20Christopher=20Nguy=E1=BB=85n?= Date: Wed, 16 Nov 2011 21:13:07 +0000 Subject: [PATCH] Add patch to fix crash triggered by gtk+-3, bug #390693. Package-Manager: portage-2.2.0_alpha72/cvs/Linux x86_64 --- x11-libs/libXi/ChangeLog | 8 +- x11-libs/libXi/Manifest | 14 +- .../files/libXi-1.4.3-xiquerydevice.patch | 171 ++++++++++++++++++ x11-libs/libXi/libXi-1.4.3-r1.ebuild | 40 ++++ 4 files changed, 221 insertions(+), 12 deletions(-) create mode 100644 x11-libs/libXi/files/libXi-1.4.3-xiquerydevice.patch create mode 100644 x11-libs/libXi/libXi-1.4.3-r1.ebuild diff --git a/x11-libs/libXi/ChangeLog b/x11-libs/libXi/ChangeLog index f7501cb19429..a72522ee8706 100644 --- a/x11-libs/libXi/ChangeLog +++ b/x11-libs/libXi/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for x11-libs/libXi # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/x11-libs/libXi/ChangeLog,v 1.124 2011/08/20 15:54:16 jer Exp $ +# $Header: /var/cvsroot/gentoo-x86/x11-libs/libXi/ChangeLog,v 1.125 2011/11/16 21:13:07 chithanh Exp $ + +*libXi-1.4.3-r1 (16 Nov 2011) + + 16 Nov 2011; Chí-Thanh Christopher Nguyễn + +libXi-1.4.3-r1.ebuild, +files/libXi-1.4.3-xiquerydevice.patch: + Add patch to fix crash triggered by gtk+-3, bug #390693. 20 Aug 2011; Jeroen Roovers libXi-1.4.2.ebuild, libXi-1.4.3.ebuild: diff --git a/x11-libs/libXi/Manifest b/x11-libs/libXi/Manifest index f994a789d230..ecf335c966ea 100644 --- a/x11-libs/libXi/Manifest +++ b/x11-libs/libXi/Manifest @@ -1,18 +1,10 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - +AUX libXi-1.4.3-xiquerydevice.patch 6562 RMD160 186146896f9089c478dd019d62d0375d8d8d9ae0 SHA1 18bc7b26365ef33079ec4ebbb8afdf2a6df9ef6d SHA256 693185a06fbc4839811a3ff529526dcccd58f06f28d0b594cc649b620bd39fd5 DIST libXi-1.4.1.tar.bz2 407880 RMD160 7447cc3ef411d833bee36fca6f6ffb13108ce113 SHA1 15c9d369cc76c73b5e3833ba3b39355e6cc06636 SHA256 599f1c0930f94c2ae74711b2577a7f354c4a991cc97b5ec5bb655b855c1429a6 DIST libXi-1.4.2.tar.bz2 398801 RMD160 2753987b72a91683321bc02172901f1d5c5b5664 SHA1 97e60a60dd789287e47df807e487f4952dd4ff95 SHA256 272b8041efc0a0203fb0ba33481ddec989539aed862181b58c8c3e410e325691 DIST libXi-1.4.3.tar.bz2 422637 RMD160 142d44e8e13abbb8a41826b7005f8ede1807e3ff SHA1 c66cfdee74e8d169a7992b5f257395e653ca761b SHA256 08c9d89a404740592621e6f5078414df86ccc78ca876e3da1af15639d81c74e0 EBUILD libXi-1.4.1.ebuild 1031 RMD160 05a4d8a281b6e5055146dc44be1f0eef617bc3c3 SHA1 6ad3702abba81fdc3bae3311bc96d1b9728ccc20 SHA256 e5c7387867325dd5eac0e78402f3ca20ec22b198144f73789438ce7601b287e1 EBUILD libXi-1.4.2.ebuild 985 RMD160 fb4b3ddc60ef4730604df94e0790b21f5efb373c SHA1 4f7698fe2279ad7462f41b50527ec7a253ef0501 SHA256 bf0876bbfeadeef11c5c7229be84a3d64634db9c4a7238966faa120615d1cf30 +EBUILD libXi-1.4.3-r1.ebuild 1074 RMD160 c6633959357bd2748a95951195c1d79a9d0c1894 SHA1 e8b7cfa39e23b330ec0381b77358549c96607abb SHA256 7e831b84aa2400727ecdfa8c71986ee29439908fb35a8322c6353fc2fbaff003 EBUILD libXi-1.4.3.ebuild 995 RMD160 257c7ef268c911c8f53f9457ec29a80b844e42a1 SHA1 5c60c84422806c552ede0227d58846ac6addd330 SHA256 9a2bdce3f45e58f44d22925704a5d7fea0cf1bd4315c9f194064ca8f365f0ab7 -MISC ChangeLog 14713 RMD160 01f2bee8db393a0f48281658599eadf25fe9ba9b SHA1 2a3b00938e4249a34667280b06157535682f8847 SHA256 971e1672fc18f0e4f8c89da4a6d8409556be5d012533f87b683d6eb73c074eab +MISC ChangeLog 14944 RMD160 89403563cb23fd0263b3604a78b71baf01667c6d SHA1 26e4a955b87aa4eaa447abdf852f8a3177602964 SHA256 4a647b09c943c55d03df116607ed2b0f063aaf14b35c464a66d798f82415deae MISC metadata.xml 156 RMD160 c1274bdccf57603d580de0075ba07a35b7509560 SHA1 6f78f604e3d079d39189b40aaaa1ddb06182ad91 SHA256 5101ab0d4cc8c7125eea733c44e86962769bd77acaf53b69223b9cadcdd29055 ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.17 (GNU/Linux) - -iEYEARECAAYFAk5P2K4ACgkQVWmRsqeSphO/qwCfeoLT4keGU4KHSuikPlqU6qJm -8EAAn0EIFqmNRjR0H0KNP6eRxjpb/eXC -=KiHr ------END PGP SIGNATURE----- diff --git a/x11-libs/libXi/files/libXi-1.4.3-xiquerydevice.patch b/x11-libs/libXi/files/libXi-1.4.3-xiquerydevice.patch new file mode 100644 index 000000000000..8d8e3d3c8511 --- /dev/null +++ b/x11-libs/libXi/files/libXi-1.4.3-xiquerydevice.patch @@ -0,0 +1,171 @@ +From 635c2c029b1e73311c3f650bcaf7eeb9e782134b Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 17 Aug 2011 05:20:48 +0000 +Subject: Handle unknown device classes. + +If the server sends an unknown device class in response to an XIQueryDevice +call, no memory is allocated for these classes but we still write type +and sourceid as well as setting to->classes[i]. The latter causes multiple +classes to point to the same memory field. + +Move the common code of assigning these three into the respective class type +handlers so to automatically skip any unknown classes. + +Signed-off-by: Peter Hutterer +--- +diff --git a/src/XExtInt.c b/src/XExtInt.c +index 86a780e..9e1ad19 100644 +--- a/src/XExtInt.c ++++ b/src/XExtInt.c +@@ -98,7 +98,7 @@ extern int _XiGetDevicePresenceNotifyEvent( + Display * /* dpy */ + ); + +-int copy_classes(XIDeviceInfo *to, xXIAnyInfo* from, int nclasses); ++int copy_classes(XIDeviceInfo *to, xXIAnyInfo* from, int *nclasses); + int size_classes(xXIAnyInfo* from, int nclasses); + + static XExtensionInfo *xinput_info; +@@ -1448,30 +1448,29 @@ size_classes(xXIAnyInfo* from, int nclasses) + * |______________________^ + */ + _X_HIDDEN int +-copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses) ++copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses) + { + XIAnyClassInfo *any_lib; + xXIAnyInfo *any_wire; + void *ptr_lib; + char *ptr_wire; + int i, len; ++ int cls_idx = 0; + + if (!to->classes) + return -1; + + ptr_wire = (char*)from; + ptr_lib = to->classes; +- to->classes = next_block(&ptr_lib, nclasses * sizeof(XIAnyClassInfo*)); ++ to->classes = next_block(&ptr_lib, *nclasses * sizeof(XIAnyClassInfo*)); ++ memset(to->classes, 0, sizeof(*nclasses * sizeof(XIAnyClassInfo*))); + len = 0; /* count wire length */ + +- for (i = 0; i < nclasses; i++) ++ for (i = 0; i < *nclasses; i++) + { + any_lib = (XIAnyClassInfo*)ptr_lib; + any_wire = (xXIAnyInfo*)ptr_wire; + +- to->classes[i] = any_lib; +- any_lib->type = any_wire->type; +- any_lib->sourceid = any_wire->sourceid; + switch(any_wire->type) + { + case XIButtonClass: +@@ -1485,6 +1484,8 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses) + cls_lib = next_block(&ptr_lib, sizeof(XIButtonClassInfo)); + cls_wire = (xXIButtonInfo*)any_wire; + ++ cls_lib->type = cls_wire->type; ++ cls_lib->sourceid = cls_wire->sourceid; + cls_lib->num_buttons = cls_wire->num_buttons; + size = ((((cls_wire->num_buttons + 7)/8) + 3)/4); + cls_lib->state.mask_len = size * 4; +@@ -1499,6 +1500,7 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses) + for (j = 0; j < cls_lib->num_buttons; j++) + cls_lib->labels[j] = *atoms++; + ++ to->classes[cls_idx++] = any_lib; + break; + } + case XIKeyClass: +@@ -1509,12 +1511,15 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses) + cls_lib = next_block(&ptr_lib, sizeof(XIKeyClassInfo)); + cls_wire = (xXIKeyInfo*)any_wire; + ++ cls_lib->type = cls_wire->type; ++ cls_lib->sourceid = cls_wire->sourceid; + cls_lib->num_keycodes = cls_wire->num_keycodes; + cls_lib->keycodes = next_block(&ptr_lib, + cls_lib->num_keycodes * sizeof(int)); + memcpy(cls_lib->keycodes, &cls_wire[1], + cls_lib->num_keycodes); + ++ to->classes[cls_idx++] = any_lib; + break; + } + case XIValuatorClass: +@@ -1525,6 +1530,8 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses) + cls_lib = next_block(&ptr_lib, sizeof(XIValuatorClassInfo)); + cls_wire = (xXIValuatorInfo*)any_wire; + ++ cls_lib->type = cls_wire->type; ++ cls_lib->sourceid = cls_wire->sourceid; + cls_lib->number = cls_wire->number; + cls_lib->label = cls_wire->label; + cls_lib->resolution = cls_wire->resolution; +@@ -1534,12 +1541,16 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses) + /* FIXME: fractional parts */ + cls_lib->mode = cls_wire->mode; + ++ to->classes[cls_idx++] = any_lib; + } + break; + } + len += any_wire->length * 4; + ptr_wire += any_wire->length * 4; + } ++ ++ /* we may have skipped unknown classes, reset nclasses */ ++ *nclasses = cls_idx; + return len; + } + +@@ -1550,6 +1561,7 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie) + XIDeviceChangedEvent *out; + XIDeviceInfo info; + int len; ++ int nclasses = in->num_classes; + + len = size_classes((xXIAnyInfo*)&in[1], in->num_classes); + +@@ -1564,13 +1576,13 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie) + out->deviceid = in->deviceid; + out->sourceid = in->sourceid; + out->reason = in->reason; +- out->num_classes = in->num_classes; + + out->classes = (XIAnyClassInfo**)&out[1]; + + info.classes = out->classes; + +- copy_classes(&info, (xXIAnyInfo*)&in[1], in->num_classes); ++ copy_classes(&info, (xXIAnyInfo*)&in[1], &nclasses); ++ out->num_classes = nclasses; + + return 1; + } +diff --git a/src/XIQueryDevice.c b/src/XIQueryDevice.c +index 4e2f392..c22aee1 100644 +--- a/src/XIQueryDevice.c ++++ b/src/XIQueryDevice.c +@@ -29,7 +29,7 @@ + #include + #include "XIint.h" + +-extern int copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses); ++extern int copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses); + extern int size_classes(xXIAnyInfo* from, int nclasses); + + XIDeviceInfo* +@@ -87,7 +87,7 @@ XIQueryDevice(Display *dpy, int deviceid, int *ndevices_return) + ptr += ((wire->name_len + 3)/4) * 4; + + lib->classes = Xmalloc(size_classes((xXIAnyInfo*)ptr, lib->num_classes)); +- ptr += copy_classes(lib, (xXIAnyInfo*)ptr, lib->num_classes); ++ ptr += copy_classes(lib, (xXIAnyInfo*)ptr, &lib->num_classes); + } + + Xfree(buf); +-- +cgit v0.9.0.2-2-gbebe diff --git a/x11-libs/libXi/libXi-1.4.3-r1.ebuild b/x11-libs/libXi/libXi-1.4.3-r1.ebuild new file mode 100644 index 000000000000..7977572d6457 --- /dev/null +++ b/x11-libs/libXi/libXi-1.4.3-r1.ebuild @@ -0,0 +1,40 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/x11-libs/libXi/libXi-1.4.3-r1.ebuild,v 1.1 2011/11/16 21:13:07 chithanh Exp $ + +EAPI=4 + +XORG_DOC=doc +inherit xorg-2 + +DESCRIPTION="X.Org Xi library" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd ~x64-freebsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt" +IUSE="" + +RDEPEND=">=x11-libs/libX11-1.3 + >=x11-libs/libXext-1.1 + >=x11-proto/inputproto-2.0 + >=x11-proto/xproto-7.0.13 + >=x11-proto/xextproto-7.0.3" +DEPEND="${RDEPEND}" + +PATCHES=( + "${FILESDIR}/${PN}-1.4.3-xiquerydevice.patch" +) + +pkg_setup() { + xorg-2_pkg_setup + XORG_CONFIGURE_OPTIONS=( + $(use_enable doc specs) + $(use_with doc xmlto) + $(use_with doc asciidoc) + --without-fop + ) +} + +pkg_postinst() { + xorg-2_pkg_postinst + + ewarn "Some special keys and keyboard layouts may stop working." + ewarn "To fix them, recompile xorg-server." +} -- 2.26.2