[PATCH evdev] Don't update first_val and num_val if we don't have data (#32480)

Peter Hutterer peter.hutterer at who-t.net
Wed Dec 22 18:19:29 PST 2010


For touchpads, rel_queued may be on (due to abs to rel conversion) but the
delta for x/y is 0/0 on the first touch. Hence, we don't have any valuators
to post. The current results in a num_vals of -15 and a subsequent segfault
when the data is posted to the server.

Start with a last valuator of -1, so that we know if we have at least one to
post.

X.Org Bug 32480 <http://bugs.freedesktop.org/show_bug.cgi?id=32480>

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---

Testcase: server 1.9 with evdev 2.5.99.902 (not git master!) and force evdev
for touchpads.  Server will crash when touchpad is used the first time.

 src/evdev.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index 50847a8..d47b6c2 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -402,7 +402,7 @@ EvdevProcessValuators(InputInfoPtr pInfo, int v[MAX_VALUATORS], int *num_v,
     }
 
     if (pEvdev->rel_queued) {
-        int first = REL_CNT, last = 0;
+        int first = REL_CNT, last = -1;
         int i;
 
         if (pEvdev->swap_axes) {
@@ -428,8 +428,11 @@ EvdevProcessValuators(InputInfoPtr pInfo, int v[MAX_VALUATORS], int *num_v,
             }
         }
 
-        *num_v = (last - first + 1);
-        *first_v = first;
+        if (last >= 0)
+        {
+            *num_v = (last - first + 1);
+            *first_v = first;
+        }
     }
     /*
      * Some devices only generate valid abs coords when BTN_TOOL_PEN is
-- 
1.7.3.4



More information about the xorg-devel mailing list