On Wed, Apr 14, 2010 at 05:27:51PM +0200, Benjamin Tissoires wrote:
> 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 |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index 7723ba6..dba3370 100644
> --- a/hw/xfree86/common/xf86Xinput.c
> +++ b/hw/xfree86/common/xf86Xinput.c
> @@ -86,6 +86,7 @@
>  #include "windowstr.h"       /* screenIsSaved */
>  
>  #include <stdarg.h>
> +#include <stdint.h>          /* for int64_t */
>  
>  #include <X11/Xpoll.h>
>  
> @@ -1177,12 +1178,11 @@ 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

merged into my tree, thank you.

Cheers,
  Peter
_______________________________________________
[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