[Git][xorg-team/lib/libxi][debian-unstable] 8 commits: gitlab CI: drop the ci-fairy check-mr job
"Timo Aaltonen (@tjaalton)" <[email protected]>
| Newsgroups | gmane.linux.debian.devel.x |
|---|---|
| Message-ID | <[email protected]> |
Timo Aaltonen pushed to branch debian-unstable at X Strike Force / lib / libxi Commits: 3103b584 by Alan Coopersmith at 2026-01-25T15:31:53-08:00 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 <[email protected]> Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/19> - - - - - c4cbdcf7 by Peter Hutterer at 2026-05-13T14:13:15+10:00 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 <[email protected]> Part-of: <https://gitlab.freedesktop.org/xorg/lib/libxi/-/merge_requests/20> - - - - - 0700edcb by Peter Hutterer at 2026-05-13T14:13:18+10:00 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> - - - - - f00f7e91 by Peter Hutterer at 2026-05-18T10:12:04+10:00 libXi 1.8.3 Signed-off-by: Peter Hutterer <[email protected]> - - - - - d5bae8fa by Timo Aaltonen at 2026-08-21T06:12:22+03:00 Merge branch 'upstream-unstable' into debian-unstable - - - - - c9c9c832 by Timo Aaltonen at 2026-08-21T06:31:19+03:00 New upstream release. - - - - - 0664ef2a by Timo Aaltonen at 2026-08-21T06:51:14+03:00 watch: Updated to version 5. - - - - - b8257be2 by Timo Aaltonen at 2026-08-21T10:39:49+03:00 source: Migrate to format 3.0 (quilt). - - - - - 6 changed files: - .gitlab-ci.yml - configure.ac - debian/changelog - + debian/source/format - debian/watch - src/XExtInt.c Changes: ===================================== .gitlab-ci.yml ===================================== @@ -46,21 +46,6 @@ check-commits: junit: results.xml allow_failure: true -# -# Verify that the merge request has the allow-collaboration checkbox ticked -# -check-merge-request: - extends: - - .fdo.ci-fairy - stage: deploy - script: - - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml - artifacts: - when: on_failure - reports: - junit: results.xml - allow_failure: true - # # Build a container with the given tag and the packages pre-installed. ===================================== configure.ac ===================================== @@ -1,7 +1,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) -AC_INIT([libXi], [1.8.2], +AC_INIT([libXi], [1.8.3], [https://gitlab.freedesktop.org/xorg/lib/libXi/issues], [libXi]) AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_HEADERS([src/config.h]) ===================================== debian/changelog ===================================== @@ -1,3 +1,11 @@ +libxi (2:1.8.3-1) UNRELEASED; urgency=medium + + * New upstream release. + * watch: Updated to version 5. + * source: Migrate to format 3.0 (quilt). + + -- Timo Aaltonen <[email protected]> Fri, 21 Aug 2026 06:12:31 +0300 + libxi (2:1.8.2-2) unstable; urgency=medium * Team upload ===================================== debian/source/format ===================================== @@ -0,0 +1 @@ +3.0 (quilt) ===================================== debian/watch ===================================== @@ -1,3 +1,4 @@ -version=3 -opts=pgpsigurlmangle=s/$/.sig/ \ -https://xorg.freedesktop.org/releases/individual/lib/ libXi-(.*)\.tar\.gz +Version: 5 + +Source: https://xorg.freedesktop.org/releases/individual/lib/ +Pgp-Mode: auto ===================================== src/XExtInt.c ===================================== @@ -382,7 +382,7 @@ _XiCheckExtInit( } if (info->data == NULL) { - info->data = (XPointer) Xmalloc(sizeof(XInputData)); + info->data = (XPointer) Xcalloc(1, sizeof(XInputData)); if (!info->data) { UnlockDisplay(dpy); return (-1); @@ -464,6 +464,26 @@ _XiGetDevicePresenceNotifyEvent(Display * dpy) return info->codes->first_event + XI_DevicePresenceNotify; } +static XInputClass * +find_class(XInputClass *classes, size_t num_classes, int which) +{ + XInputClass *current = classes; + size_t i; + + for (i = 0; i < num_classes; i++) { + if (current->length == 0) + return NULL; + if (current->class == which) + break; + current = (XInputClass *)((char *)current + + current->length); + } + if (i >= num_classes) + return NULL; + + return current; +} + /*********************************************************************** * * Handle Input extension events. @@ -700,12 +720,15 @@ XInputWireToEvent( } else if (save_type == XI_DeviceStateNotify) { int j; XDeviceStateNotifyEvent *sev = (XDeviceStateNotifyEvent *) save; - XInputClass *any = (XInputClass *) & sev->data[0]; + XInputClass *any; XValuatorStatus *v; - for (i = 0; i < sev->num_classes; i++) - if (any->class != ValuatorClass) - any = (XInputClass *) ((char *)any + any->length); + any = find_class((XInputClass *) & sev->data[0], + sev->num_classes, + ValuatorClass); + if (!any) + return (DONT_ENQUEUE); + v = (XValuatorStatus *) any; i = v->num_valuators; j = xev->num_valuators; @@ -721,6 +744,8 @@ XInputWireToEvent( } v->num_valuators += j; + } else { + return (DONT_ENQUEUE); } *re = *save; return (ENQUEUE_EVENT); @@ -801,19 +826,19 @@ XInputWireToEvent( break; case XI_DeviceKeystateNotify: { - int i; XInputClass *anyclass; register XKeyStatus *kv; deviceKeyStateNotify *ksev = (deviceKeyStateNotify *) event; XDeviceStateNotifyEvent *kstev = (XDeviceStateNotifyEvent *) save; - anyclass = (XInputClass *) & kstev->data[0]; - for (i = 0; i < kstev->num_classes; i++) - if (anyclass->class == KeyClass) - break; - else - anyclass = (XInputClass *) ((char *)anyclass + - anyclass->length); + if (save->type != info->codes->first_event + XI_DeviceStateNotify) + return (DONT_ENQUEUE); + + anyclass = find_class((XInputClass *) & kstev->data[0], + kstev->num_classes, + KeyClass); + if (!anyclass) + return (DONT_ENQUEUE); kv = (XKeyStatus *) anyclass; kv->num_keys = 256; @@ -828,19 +853,19 @@ XInputWireToEvent( break; case XI_DeviceButtonstateNotify: { - int i; XInputClass *anyclass; register XButtonStatus *bv; deviceButtonStateNotify *bsev = (deviceButtonStateNotify *) event; XDeviceStateNotifyEvent *bstev = (XDeviceStateNotifyEvent *) save; - anyclass = (XInputClass *) & bstev->data[0]; - for (i = 0; i < bstev->num_classes; i++) - if (anyclass->class == ButtonClass) - break; - else - anyclass = (XInputClass *) ((char *)anyclass + - anyclass->length); + if (save->type != info->codes->first_event + XI_DeviceStateNotify) + return (DONT_ENQUEUE); + + anyclass = find_class((XInputClass *) & bstev->data[0], + bstev->num_classes, + ButtonClass); + if (!anyclass) + return (DONT_ENQUEUE); bv = (XButtonStatus *) anyclass; bv->num_buttons = 256; View it on GitLab: https://salsa.debian.org/xorg-team/lib/libxi/-/compare/d74e8d498b295cff9375370177f366e2c2574a94...b8257be2408f2fb92b6c17d1f6b7d35e9fdaf3ea -- View it on GitLab: https://salsa.debian.org/xorg-team/lib/libxi/-/compare/d74e8d498b295cff9375370177f366e2c2574a94...b8257be2408f2fb92b6c17d1f6b7d35e9fdaf3ea You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help