commit 9ea632ab9dce9ad6630ef7db9d1850ea3d0a2419
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Fri Oct 16 12:36:21 2026 -0700

    libXi 1.8.4
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 8c4dfb762b4a305a2f0f85b1af3fdca395c44359
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Thu Oct 8 10:58:47 2026 +0200

    XGetDeviceControl: set DEVICE_ENABLE length to the struct size
    
    sizeof(E) is the pointer width, not sizeof(XDeviceEnableState).
    
    Reported-by: Adam Bedard, Security Researcher.
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/26>

commit 4eb9f70b67034ace1abdf785fd8dcba7b6dc739d
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Thu Oct 8 10:58:33 2026 +0200

    XGetDeviceControl: size DEVICE_ENABLE replies for XDeviceEnableState
    
    DEVICE_ENABLE had a fill path but no size arm, so allocation used the
    wire length (8 bytes) while the fill wrote a full XDeviceEnableState.
    
    CVE-2026-109090
    
    Reported-by: Adam Bedard, Security Researcher.
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/26>

commit f7836d0a0f45e9e6c2c147c5dea4b6bc08231f2e
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Thu Oct 1 15:01:03 2026 +0200

    XGetDeviceControl: require reply control to match the request
    
    Size and fill both used to key off different values, so a hostile
    server could answer DEVICE_RESOLUTION with a small fixed-size control
    and still drive the unbounded valuator copy.
    
    CVE-2026-109089
    
    Reported-by: Adam Bedard, Security Researcher.
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/26>

commit bd2a989f77ae9dd0869952ec458002514082c0fd
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sat Oct 10 15:49:17 2026 -0700

    Set num_classes to number of copied classes in copyDeviceChangedEvent
    
    Make sure caller knows how many classes we actually copied, instead of
    just keeping the value copied from in->num_classes.
    
    Fixes: 9790baa ("Track unknown classes correctly during copyDeviceChangedEvent")
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/25>

commit 6e85cb6fbef9e86e6548c1b4919dd6928c05cfe5
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sat Oct 10 15:46:09 2026 -0700

    Track XIValuatorClass correctly during copyDeviceChangedEvent
    
    Previous commit missed a spot when converting classes to use
    `out_idx` instead of `i`
    
    Fixes: 9790baa ("Track unknown classes correctly during copyDeviceChangedEvent")
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/25>

commit 9790baaf0b683f95ae34e8d6510149aa32b8e05e
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Oct 2 16:47:09 2026 +1000

    Track unknown classes correctly during copyDeviceChangedEvent
    
    Don't assume we have the same number of out classes to in classes, only
    count the ones we know and can handle.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/24>

commit 8010b5e5e62e4f6af66800cccdcd1a210befa873
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Oct 2 15:34:19 2026 +1000

    Add missing touch and gesture class handling to copyDeviceChangedEvent
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/24>

commit 94d727dfe9dee8428a79ab00f8bfd803793ef93d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Sep 29 14:49:08 2026 +1000

    XListInputDevices: make sure we have enough bytes for the info
    
    rep.ndevices and rep.length are two independent server-controlled
    values, and nothing required the reply to actually contain ndevices *
    sizeof(xDeviceInfo) bytes of device records.
    
    With rep.ndevices = 255 and rep.length = 0 the reply buffer is a 1-byte
    Xmalloc(0) block, the sizing loop reads list->num_classes for 255
    records past its end, and
    
        any = (char *)list + ndevices * sizeof(xDeviceInfo)
    
    is past the end.
    
        SizeClassInfo(&any, end - (char *)any, ...)
    
    then converts a negative pointer difference to size_t.
    
    Assisted-by: Claude:claude-opus-5
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/24>

commit ab4984e7f7362f36665b5f2e1069d8624c35b330
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Oct 2 15:37:16 2026 +1000

    Fix potential for class size mismatches
    
    Consistently use sizeDeviceClassType() for touch and gesture classes too
    so our pointer advancement matches what size_classes() reserved and to
    avoid misalignment (we need to get things aligned to 8 byte boundaries).
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/24>

commit cf01d0dfa5855d7f639d905e125e7cd89a3ec567
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Oct 2 15:30:51 2026 +1000

    Actually copy the full keycodes in copy_classes
    
    XI2 keycodes are CARD32, we only copied num_keycodes bytes which left
    the remainder of the array uninitialzied.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/24>

commit 12953fd96dbdffd3f42f7845a9ba2501417345b2
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Sep 29 14:51:19 2026 +1000

    wireToEnterLeave: validate the valuator count to avoid OOB writes
    
    XValuatorStatus holds a fixed 'int valuators[6]' (XInput.h). The
    XI_DeviceStateNotify handler copied the wire count verbatim:
    
        vev->num_valuators = sev->num_valuators;
    
    In a follow-up XI_DeviceValuator event we used that num_valuator
    as base index. So a server sending num_valuators N followed by a
    valuator event will copy the (up to 3) valuators into
    the valuators[6] array starting at index N.
    
    On top of this it would also increase num_valuators to a max of N + 3
    which probably has some effects on other APIs.
    
    Clamp it to the three we write and if we get another three, update it
    accordingly.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/24>

commit 8caed97a3e356ff5827704f3c28aed0d50d9136d
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Sep 11 16:15:21 2026 +0200

    wireToEnterLeave: validate buttons_len against the received event size
    
    wireToEnterLeave() trusts the wire-supplied buttons_len field and
    copies buttons_len * 4 bytes from the event payload without checking
    that many bytes were actually received.
    
    A malicious X server can send an XI2 Enter, Leave, FocusIn or FocusOut
    event with a small ge.length but an oversized buttons_len, causing
    memcpy() to read past the end of the event buffer.
    
    Pass the total event size into wireToEnterLeave() and reject events
    where buttons_len * 4 exceeds the payload following the fixed-size
    xXIEnterEvent header.
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-15083
    
    CVE-2026-94282
    
    v2: Also bound-check wireToDeviceEvent, wireToHierarchyChangedEvent, and
    wireToRawEvent against the received event size.
    v3: Pass received event size into wireToDeviceChangedEvent.
    v4: Reject undersized TouchOwnership, Barrier, and Gesture
    Pinch/Swipe events when ge->length is too small for the header. (Peter
    Hutterer)
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit 1d5813ba0431b7e9a324a412e8b8ef532f65c5be
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Oct 2 10:32:20 2026 +0200

    XListInputDevices: validate class lengths cumulatively in SizeClassInfo
    
    SizeClassInfo() checked each class record's length against the original
    remaining buffer size, but never decremented it after advancing past
    each record. A malicious server could supply class records whose
    individual lengths each passed the check but whose cumulative size
    exceeded the buffer, causing out-of-bounds reads in SizeClassInfo and
    ParseClassInfo.
    
    This is fixed by:
    
    - Decrementing len after each class record in SizeClassInfo
    - Validating minimum class-specific struct sizes before accessing fields
    - Rejecting unknown class types
    - Adding an end pointer and bounds checks to ParseClassInfo
    - Checking ParseClassInfo return value at the call site
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-14718
    
    CVE-2026-94281
    
    v2: Free the partially initialized device list on ParseClassInfo failure
    instead of returning it.
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit 2e5ecd1876a72e09aaeea87e1a8135ae764803d9
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Oct 2 10:32:05 2026 +0200

    XListInputDevices: validate device name lengths against reply buffer
    
    The name-parsing loops trusted the server-supplied length byte without
    checking that the advertised name actually fits within the received
    reply buffer.
    
    Additionally, the sizing loop used a wrong end pointer derived from
    the already-incremented list pointer plus the full reply length,
    which was too generous and could not catch overruns.
    
    A malicious server could return a ListInputDevices reply with a name
    length byte exceeding the remaining reply bytes, causing memcpy() to
    read past the buffer and crash the client.
    
    Check each name length against the actual reply buffer end (already
    computed as "end") in both the sizing and copy loops before accessing
    the name data.
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-14711
    
    CVE-2026-93545
    
    v2: Avoid using a backward goto label. (Peter Hutterer)
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit e2ec4a1c8403c99f6c08621920b0efb0e0d6d533
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Jul 31 16:27:02 2026 +0200

    XIQueryDevice: keep padded name and class bytes within the reply
    
    Class parsing helpers already reject overlong or inconsistent XI2
    class records against the reply end pointer. Also require the padded
    device name and the bytes consumed by copy_classes() to stay inside
    that bound before advancing to the next device.
    
    A malformed XIQueryDevice reply with an inflated name_len (within the
    raw length check but exceeding the 4-byte-padded name field) could
    otherwise leave the parser misaligned for subsequent class data.
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-14043
    
    CVE-2026-93544
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit f885619bb67f1ddec5d4e40ff3eff1a3269a0069
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Jul 31 16:20:56 2026 +0200

    size_classes/copy_classes: enforce XI2 per-type class payload sizes
    
    Bounding any_wire->length against the reply/event end pointer is not
    enough: a class length that fits in the buffer can still be shorter
    than the type-specific wire struct, and button/key counts can claim
    more bytes than that class contains. copy_classes() then reads past
    the payload when converting XI_DeviceChanged events (and when parsing
    XIQueryDevice replies).
    
    Validate per-type minimum sizes and that button/key payloads fit in
    the declared class length, and reject DeviceChanged allocations that
    would overflow size_t.
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-13717
    
    CVE-2026-93543
    
    v2: Use size_t in size_classes and reject length overflow.
    v3: XI2 keycodes are 4 bytes (Peter Hutterer)
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit 59f8dece822889f1db2b160775f9badbf810a734
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Jul 31 16:04:12 2026 +0200

    size_classes/copy_classes: bound XI2 class lengths to the received buffer
    
    Both size_classes() and copy_classes() walked server-provided class
    records using any_wire->length without checking that each class fits
    in the reply or event buffer. XIQueryDevice() had the reply end
    pointer available but did not pass it down; the same helpers are
    reused for XI_DeviceChanged conversion.
    
    A forged XIQueryDevice reply or truncated DeviceChanged event with an
    overlong class length could therefore read past the allocated buffer
    and crash the client.
    
    Pass an end pointer into size_classes and copy_classes, reject zero
    or overlong wire lengths before advancing, and propagate parse
    failures to the callers.
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-13600
    
    CVE-2026-93542
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit 9a5f8636b9f3a2092ed845be6719abcf8f6bf383
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Fri Jul 31 15:05:27 2026 +0200

    XQueryDeviceState: check ValuatorClass num_valuators against class length
    
    The first pass only verified that the xValuatorState header fit in the
    reply. num_valuators was then used to size the destination and to copy
    valuator words from (v + 1) without ensuring those words fit in
    any->length.
    
    A forged QueryDeviceState reply with length equal to the size of
    xValuatorState and a large num_valuators could therefore read past
    the allocated reply buffer (denial of service).
    
    Reject ValuatorClass entries whose valuator array does not fit in the
    declared class length before sizing or copying.
    
    Found by AISLE in partnership with Red Hat
    
    AISLE-Report-PSIRTSUPT-13253
    
    CVE-2026-93541
    
    v2: Also validate KeyClass/ButtonClass lengths, reject unknown classes,
    and free partial state on error.
    
    Reported-by: Aisle Research
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    Assisted-by: AI
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/23>

commit 3a0adabd16d8bf19c772061ad67f25c51281edf3
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Sep 13 12:49:33 2026 -0700

    Strip trailing whitespace from source files
    
    Performed with: `git ls-files | xargs perl -i -p -e 's{[ \t]+$}{}'`
    
    `git diff -w` & `git diff -b` show no diffs from this change
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/22>

commit f00f7e9140b4707775331950dd67851e55058c40
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon May 18 10:12:04 2026 +1000

    libXi 1.8.3
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 0700edcb4165692f1dd68ed5b06dd645eef9133f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Apr 27 09:15:33 2026 +1000

    Skip unknown preceeding events to DeviceValuator
    
    If we receive a DeviceValuator events, we check the preceding 'save'
    event to figure out where to append the valuator data to. This check was
    missing the fallthrough case, if none of the saved types matched our
    expectation we continued anyway, returning the 'save' event to the
    caller.
    
    There are two event sequences where this matters, if the DeviceValuator
    follows an event that shouldn't be followed by a valuator event. In that
    case we enqueued 'save' again though we should've already enqueued that
    once anyway.
    The second case is where the very first event is a DeviceValuator event
    which now passes a zero save event. That is likely to cause a segfault
    lateron.
    
    Fix this by ignoring the bogus event.
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/20>

commit c4cbdcf747ebac89520903458e8242b0b35ada1d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Apr 21 15:36:49 2026 +1000

    Discard Valuator/Key/ButtonStateNotify without the preceeding events
    
    DeviceKeyStateNotify, DeviceButtonStateNotify, and DeviceValuator are
    follow-on wire events that carry overflow data from a preceding event.
    DeviceKey/ButtonStateNotify carry keys/buttons 33-255 from a preceding
    DeviceStateNotify, while DeviceValuator carries axis data from a
    preceding DeviceKeyPress, DeviceMotionNotify, etc. The wire-to-event
    handler (XInputWireToEvent) accumulates these multi-event sequences in
    a persistent 'save' buffer: the primary event populates it, then the
    follow-on events append to it.
    
    Because the 'save' event is used as the buffer it is not
    zero-initialized for those follow-on events. If the first events we
    receive is such a follow-on event, then we operate on uninitialized
    data, causing infinte loops (anyclass->length ==0) or OOB read (garbge
    anyclass->length). In the fallthrough case (class not found) we had a
    memcpy to an arbitrary location.
    
    Fix this by adding a helper function that now checks for zero length,
    save->type and that we actually find the expected class.
    
    Reported-by: Joshua J. Drake <josh.drake@ioactive.com>
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/20>

commit 3103b5849d89335fd57b08b91ad634216ed96073
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Jan 25 15:31:53 2026 -0800

    gitlab CI: drop the ci-fairy check-mr job
    
    The only thing this checked was the checkbox for allowing maintainers to
    edit the MR. Changed permissions checks now fail this job but luckily
    the setting it checked has been the default for years anyway so we can
    drop it.
    
    https://gitlab.freedesktop.org/freedesktop/ci-templates/-/issues/81
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/19>

commit 3c2d5aedd7708c75710b39268631762de904c304
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Sep 5 11:15:04 2024 +1000

    libXi 1.8.2
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit a5af26c654b4da5fd5eaaeaa2173c734ab9e63ec
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Aug 27 11:01:06 2024 +1000

    XGetFeedbackControl: skip over unknown feedback controls
    
    If the server sends an unknown feedback control class we would allocate
    the amount of *protocol* bytes for the client representation but then
    later mess up the actual composition of the classes due to
    Feedback->length never being initialized.
    
    So while in theory it looks like this:
       |-------------- allocated size -----------------|
       [led feedback] [ ?unknown? ] [kbd feedback][....]
    with unknown being the size of the class on the protocol,
    in practice it looks like this:
       |-------------- allocated size -----------------|
       [led feedback] [ ?unknown?                ] [kbd feedback][...]
    with unknown being the size of whatever was in the Feeback->length
    pointed to at the time. The content of unknown is never initialized.
    
    Fix this by making unknown classes disappear so the above becomes:
       |------- allocated size ---------|
       [led feedback][kbd feedback][....]
    
    Closes #16
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/18>

commit dabce4dbe5eab35076e31fd0a628cbe11b858fa1
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Mon Aug 26 11:49:49 2024 -0700

    wireTo*Event: check for malloc() failure
    
    Fixes 6 -Wanalyzer-possible-null-dereference and
    1 -Wanalyzer-null-dereference and warnings from gcc 14.1
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/17>

commit 56b11459f833df8f324587847534a548b070da94
Author: kyomawolf <kyomawolf@kyomawolf.eu>
Date:   Thu Oct 5 21:52:36 2023 +0200

    fixed wrong type in man page
    
    Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/14>

commit 57ce2e8ba4c1f1bc5792e14bc7082f3ebd0915be
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Jan 29 11:27:11 2024 +1000

    Allow XIFreeDeviceInfo on a null pointer

commit a340bc0424a73d9fc4badbb7aee5284877635ca9
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Fri Oct 13 11:17:43 2023 -0700

    gitlab CI: Update to latest CI templates
    
    Current template fails to rebuild the CI container with the current
    Debian stable release (a new release since the last update)
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 09f3eb570fe79bfc0c430b6059d7b4acaf371c24
Author: Matthieu Herrb <matthieu@herrb.eu>
Date:   Sat Aug 5 10:32:03 2023 +0000

    Fix double alignment on 32bits machines with strict constraints

commit 3a7503ec7703f10de17c622ea22b7bff736cea74
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 4 14:42:12 2023 +1000

    libXi 1.8.1
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 0f1541e1e5bd57686edf95c3532544556ed370bb
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Apr 28 11:12:47 2023 +1000

    Initialize a few stack vars to zero
    
    Modified version of the patch from #4
    
    Fixes #4
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 826215af0cc46b19555063b8894de6781d4c5993
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sat Mar 4 10:44:45 2023 -0800

    configure: Use LT_INIT from libtool 2 instead of deprecated AC_PROG_LIBTOOL
    
    AC_PROG_LIBTOOL was replaced by LT_INIT in libtool 2 in 2008,
    so it's time to rely on it.
    
    Clears autoconf warnings:
    
    configure.ac:13: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
    configure.ac:13: You should run autoupdate.
    aclocal.m4:3465: AC_PROG_LIBTOOL is expanded from...
    configure.ac:13: the top level
    
    libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
    libtoolize: and rerunning libtoolize and aclocal.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 08431d0684f9a1edf199f6c6060d2bef1ac78399
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Thu Aug 25 15:39:36 2022 -0700

    XInput_find_display: Don't dereference NULL dpyinfo
    
    Unlikely, but could happen if calloc fails in XextAddDisplay()
    
    Relies on XextHasExtension(i) macro from <X11/extensions/extutil.h>
    which checks for ((i) && ((i)->codes))
    
    Fixes: #15
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit bca3474a8622fde5815260461784282f78a4efb5
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sat Jul 23 15:29:23 2022 -0700

    gitlab CI: enable gitlab's builtin static analysis
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 87202ce9851c5fb61038829abd5b1feb42334a35
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sat Jul 23 15:28:42 2022 -0700

    gitlab CI: enable commit & merge request checks
    
    Uses ci-fairy from freedesktop/ci-templates
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 0fb16bad9c851c11d171ff601bf8adae9ffc6fdb
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Jul 17 13:39:34 2022 -0700

    Fix spelling/wording issues
    
    Found by using:
        codespell --builtin clear,rare,informal,code,names
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit ed12a34ed79d3751fc35194d93b7ad370a1a8b8a
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Jul 17 13:34:52 2022 -0700

    Build xz tarballs instead of bzip2
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit f24d7f43ab4d97203e60677a3d42e11dbc80c8b4
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Wed Sep 15 19:28:03 2021 +0300

    libXi 1.8
    
    Signed-off-by: Povilas Kanapickas <povilas@radix.lt>

commit dd9a260b29c50be90e92048b0e067456ff18675e
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Wed Sep 15 19:27:50 2021 +0300

    Bump the requirement of inputproto to 2.3.99.1

commit a761ae5119b1460068d6f62219c4e2705ef20814
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Sat Sep 4 00:03:50 2021 +0300

    man: Document XIAllowEvents

commit 42ee1f0b0660c5d6aaefbb55ef76ea97ad57d4f6
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Tue Jun 1 14:43:39 2021 +0300

    libXi 1.7.99.2

commit a7343d53509e66d92e91238e9f4ecc2bf154e045
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Sun May 30 20:47:38 2021 +0300

    gitlab-ci: Setup gitlab build

commit dd3df0b61499fa231a5a82e14d17bf37ce917d1d
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Sun May 30 19:56:18 2021 +0300

    Fix compile error that slipped through
    
    Lesson for the future: make sure the private environment (e.g
    convenience scripts) don't add changes where they are not expected. In
    my case I'm building and installing Debian packages straigth away. And
    one of the extra commits for Debian support had a change that had to go
    to the libXi repository.
    
    The development snapshot 1.7.99.1 has thus not been released (only a
    commit with the version bump was pushed).
    
    Signed-off-by: Povilas Kanapickas <povilas@radix.lt>

commit f036a6399a0bb1808dc82f7a91a1ae5a7e57691e
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Sun May 30 19:38:07 2021 +0300

    libXi 1.7.99.1

commit 4b2f0f0c0674915645881d9b73e9b8d4cf1a315f
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Sat Oct 10 02:53:42 2020 +0300

    Update the list of supported XI versions

commit ed1788b8c3a78f6dc523487e46e202a5f667407c
Author: Povilas Kanapickas <povilas@radix.lt>
Date:   Sat Oct 10 02:53:41 2020 +0300

    Add support for XI 2.4 gesture events

commit 8b4ea802fa3ba769dc8335f0e72c6f0cb7c9c35e
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Oct 4 13:48:06 2020 -0700

    man pages: fix more typos
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 6affddac55f03bff63b1e37e475d8e0d0bb84e85
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Oct 4 13:21:24 2020 -0700

    man pages: Add more missing spaces.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit cff134328cb31df5e366729aca6c4131a1e3304f
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Sun Oct 4 13:15:13 2020 -0700

    man/XGrabDeviceButton.txt: Fix bad .P -> paragraph break conversion
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit 0944a10d6e22b02f229b4bbaab60aac170ef1bba
Author: Samanta Navarro <ferivoz@riseup.net>
Date:   Sun Oct 4 18:55:06 2020 +0000

    Fix typos in manual pages

commit e05da79a98775edb91ffe3de3b413f156bc4d6e7
Author: Matt Turner <mattst88@gmail.com>
Date:   Wed Jun 19 12:42:33 2019 -0400

    libXi 1.7.10
    
    Signed-off-by: Matt Turner <mattst88@gmail.com>

commit dd5cedb7cd631cf4aeaadfd9cb993f0086857dbd
Author: Matt Turner <mattst88@gmail.com>
Date:   Wed Jun 19 12:40:46 2019 -0400

    Replace open-coded FP3232_TO_DOUBLE
    
    Signed-off-by: Matt Turner <mattst88@gmail.com>

commit a42ee93c10bf9a63c22e0642d6e51877fba8dae5
Author: Alexander Bersenev <bay@hackerdom.ru>
Date:   Mon Jun 17 22:56:43 2019 +0500

    Fix the FIXME in XIValuatorClass case of copy_classes function in XExtInt.c
    
    In addition fix FP3232_TO_DOUBLE macro to correctly compute the fractional
    part.
    
    This fixes glitchy scrolling in Qt applications when the application was
    just activated or was scrolled in the backgroud. Qt uses XIQueryDevice
    call to synchronize internal scroll location with an actual one.
    
    Bug: https://gitlab.freedesktop.org/xorg/lib/libxi/issues/10

commit 3e38d823a162c21492ac243924325730d4ea61bf
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Fri Dec 7 19:43:13 2018 -0800

    Update configure.ac bug URL for gitlab migration
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit e020870b1e322e3458c1c18a456661f1951cab70
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Mon Nov 19 22:23:32 2018 -0800

    Update README for gitlab migration
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

commit e7654506717f7ff08eae7ab4c0db3fc1c2d5b7ed
Author: Raphaël Droz <raphael.droz+floss@gmail.com>
Date:   Sat Oct 27 22:17:31 2018 +0000

    Update XIChangeHierarchy.txt

commit 60ef7bab67aca3dd7c83e8726feb3c46869a74c2
Author: Jeff Smith <whydoubt@gmail.com>
Date:   Thu Feb 1 01:59:56 2018 -0600

    _XIPassiveGrabDevice needs to set time value
    
    When setting up a XIPassiveGrabDevice request, the time field is not
    being set, leading to improper data being passed 'over the wire'.
    
    Accept a time value into _XIPassiveGrabDevice and use it to set the time
    field in the request.  Since the the functions calling
    _XIPassiveGrabDevice are part of the API, and they do not accept time
    values, they can just pass CurrentTime.
    
    Signed-off-by: Jeff Smith <whydoubt@gmail.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit a1c639255b7a9270fea52de3f186eb2fca9de01a
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Jun 14 11:15:01 2017 +1000

    man: add a bunch of missing spaces
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 8ffaac5710a9a983227454d8473604daae3f172a
Author: Mihail Konev <k.mvc@ya.ru>
Date:   Thu Jan 26 13:52:49 2017 +1000

    autogen: add default patch prefix
    
    Signed-off-by: Mihail Konev <k.mvc@ya.ru>

commit c6c386431e1fa6b45ff966191e68bee1150c5e87
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Mon Mar 9 12:00:52 2015 +0000

    autogen.sh: use quoted string variables
    
    Place quotes around the $srcdir, $ORIGDIR and $0 variables to prevent
    fall-outs, when they contain space.
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit c7584066d5b06cd2bb9d99df43b741cf565820ea
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jan 24 10:32:07 2017 +1000

    autogen.sh: use exec instead of waiting for configure to finish
    
    Syncs the invocation of configure with the one from the server.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Emil Velikov <emil.velikov@collabora.com>

commit b87c312590877800b4e18a17a012b47839f5c06b
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Jan 23 13:44:58 2017 +1000

    libXi 1.7.9
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 557b60798a9da49386f1034b133838332735de22
Author: Emilio Pozuelo Monfort <pochu@debian.org>
Date:   Tue Dec 27 17:24:10 2016 +0100

    Fix possible free of uninitialized pointer
    
    If the _XReply() call fails, we'll try to free an uninitialized
    pointer.
    
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=849026
    
    Reported-by: Thomas Walker <thwalker3@gmail.com>
    Signed-off-by: Emilio Pozuelo Monfort <pochu@debian.org>
    Reviewed-by: Julien Cristau <jcristau@debian.org>
    Tested-by: Thomas Walker <thwalker3@gmail.com>
    Signed-off-by: Julien Cristau <jcristau@debian.org>

commit 4c5c8d6246debc06a56120cff71bfdf1877884d0
Author: Emilio Pozuelo Monfort <pochu@debian.org>
Date:   Tue Oct 25 21:31:19 2016 +0200

    Check that allocating a buffer succeeded
    
    Since we are going to write into the buffer, we should make sure the
    allocation didn't fail.
    
    Reported-by: Julien Cristau <jcristau@debian.org>
    Signed-off-by: Emilio Pozuelo Monfort <pochu@debian.org>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 7ac03c6c1907a39b5b42b17ad331295b8c85154d
Author: Emilio Pozuelo Monfort <pochu@debian.org>
Date:   Tue Oct 25 21:31:18 2016 +0200

    Plug a memory leak
    
    Introduced in commit 19a9cd6.
    
    Reported-by: Julien Cristau <jcristau@debian.org>
    Signed-off-by: Emilio Pozuelo Monfort <pochu@debian.org>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 1bdeb431c3cc9eec7e12fdd29a83237f2f228865
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Oct 25 12:43:44 2016 +1000

    libXi 1.7.8
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 43904c9c5a0f5750a03a9bd8c96ccda182eb5a9a
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Oct 13 13:33:11 2016 +1000

    XListInputDevices: don't touch ndevices in case of error
    
    We used to always set *ndevices to the number of devices returned by the
    server. This magically worked because we pretty much never returned an error
    except on faulty server or library implementations. With 19a9cd60 we now have
    more chances of getting an error, so the polite thing is to just leave *ndevices
    alone when we error out.
    
    Document it as such in the man page, just in case someone accidentally reads
    it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    CC: Niels Ole Salscheider <niels_ole@salscheider-online.de>
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>

commit b843fe1c0a6b4dbaae9f364042c6a247249305ef
Author: Niels Ole Salscheider <niels_ole@salscheider-online.de>
Date:   Fri Oct 7 21:46:44 2016 +0200

    SizeClassInfo can return 0 even without an error
    
    Catch the error case separately. Commit 19a9cd607d added length checking to
    SizeClassInfo but re-used the return value of 0 for an error. A device without
    classes (as is initialized by xf86-input-libinput for tablets) can
    legitimately return 0 and erroneously triggers an error.
    Fix this by using a separate value for the error.
    
    Reproducible by calling XListInputDevices() with a tablet attached.
    
    This fixes a regression introduced in commit 19a9cd607d.
    
    Signed-off-by: Niels Ole Salscheider <niels_ole@salscheider-online.de>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>

commit 8e0476653dd134cee84f4e893f656b2f93c4e3b0
Author: Matthieu Herrb <matthieu.herrb@laas.fr>
Date:   Tue Oct 4 21:14:01 2016 +0200

    libXi 1.7.7
    
    Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr>

commit 19a9cd607de73947fcfb104682f203ffe4e1f4e5
Author: Tobias Stoeckmann <tobias@stoeckmann.org>
Date:   Sun Sep 25 22:31:34 2016 +0200

    Properly validate server responses.
    
    By validating length fields from server responses, out of boundary
    accesses and endless loops can be mitigated.
    
    Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
    Reviewed-by: Matthieu Herrb <matthieu@herrb.eu>

commit 2286282f965064176b3b1492646c6e2e0f4ab7dd
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Dec 22 11:20:01 2015 +1000

    libXi 1.7.6
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 13f25bfb55f4a0bc1f614cbf9b0b13a50ecad8a0
Author: Javier Pello <javier.pello@urjc.es>
Date:   Wed Oct 7 12:41:01 2015 +0200

    Fix const compiler warnings
    
    When invoking Data, Data16 and Data32 from XChangeDeviceProperty,
    we must cast the data pointer to the right type, but we do not need
