Changes to XInput Proto Number of Events Cause Xlib WireToEvent Vector Mismatch
Julien Cristau
jcristau at debian.org
Wed Nov 25 14:58:44 PST 2009
On Wed, Nov 25, 2009 at 16:42:59 -0500, Nathan Kidd wrote:
> Hi,
>
> In the last few years inputproto's number of events (IEVENTS) has jumped
> around quite a bit between 15 and 19, which has resulted in the
> following issue I've recently became aware of:
>
> E.g.
>
> 1. xserver is built from inputproto with IEVENTS as 15 (e.g. SLES 10)
> 15 is statically compiled into xserver.
> 2. libXi is built some time later with IEVENTS as 17 (e.g. Fedora 11)
> 17 is statically compiled into libXi.
> 3. xclient runs on machine with new libXi
> xclient -> QueryExtension(XKEYBOARD)
> xserver <- event base 100
> xlib sets event_vec[100] to an xkeyboard WireToEvent function
> xclient -> QueryExtension(XInputExtension)
> xserver <- event base 85
> xlib sets event_vec[85 .. 85 + 17] xinput WireToEvent function, i.e.
> OVERWRITES xkeyboard's WireToEvent proc because xserver only allowed for
> 15 events between the event bases, since that's all it knew about when
> it was built.
> 4. the wrong WireToEvent function get's used on subsequent XKEYBOARD events
>
> On standard x.org the results aren't actually that terrible: XKEYBOARD
> and LBX have their event bases right after XInputExtension so they're
> the ones that get clobbered. Since nobody uses LBX there's no effect,
> and XKEYBOARD seems to a) either not be very noticable when it fails b)
> not be used so often in conjunction with XInputExtension, or c) my
> googling just can't turn up any complaints. If you juggle around the
> extensions (e.g. disable in xorg.conf) you can end up clobbering more
> important/sensitive extension events with far worse results (here XFIXES
> was after XInputExtension, triggering a segv in most gtk2 applications).
>
This sounds like it could be the cause of http://bugs.debian.org/515946
and/or http://bugs.debian.org/515734 which were reported by people
using Xserver 1.4 with libXi 1.2, but were never diagnosed properly.
Cheers,
Julien
More information about the xorg
mailing list