High resolution devices was generating integer overflow.
For instance the wacom Cintiq 21UX has an axis value up to
87000. Thus the term (dSx * (Cx - Rxlow)) is greater than
MAX_INT32.

Using 64bits integer avoids such problem.

Signed-off-by: Philippe Ribet <[email protected]>
Signed-off-by: Benjamin Tissoires <[email protected]>
---
 hw/xfree86/common/xf86Xinput.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 8229227..80bdd19 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -1172,12 +1172,12 @@ xf86ScaleAxis(int       Cx,
               int      Rxlow )
 {
     int X;
-    int dSx = Sxhigh - Sxlow;
-    int dRx = Rxhigh - Rxlow;
+    int64_t dSx = Sxhigh - Sxlow;
+    int64_t dRx = Rxhigh - Rxlow;
 
     dSx = Sxhigh - Sxlow;
     if (dRx) {
-       X = ((dSx * (Cx - Rxlow)) / dRx) + Sxlow;
+       X = (int)(((dSx * (Cx - Rxlow)) / dRx) + Sxlow);
     }
     else {
        X = 0;
-- 
1.6.6.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to