[PATCH v4] wintab32: Use 64-bit math in ScaleForContext.

John Chadwick john at jchw.io
Sun Nov 17 16:26:40 CST 2019


With some tablet configurations, the InExt value passed to
ScaleForContext can be very large, leading to an integer overflow. Using
MulDiv prevents this problem by internally using 64-bit math.

Signed-off-by: John Chadwick <john at jchw.io>
---
 dlls/wintab32/context.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/wintab32/context.c b/dlls/wintab32/context.c
index 0514dd78b4..ff9a4ca677 100644
--- a/dlls/wintab32/context.c
+++ b/dlls/wintab32/context.c
@@ -178,9 +178,9 @@ int TABLET_PostTabletMessage(LPOPENCONTEXT newcontext, UINT msg, WPARAM wParam,
 static inline DWORD ScaleForContext(DWORD In, LONG InOrg, LONG InExt, LONG OutOrg, LONG OutExt)
 {
     if (((InExt > 0 )&&(OutExt > 0)) || ((InExt<0) && (OutExt < 0)))
-        return ((In - InOrg) * abs(OutExt) / abs(InExt)) + OutOrg;
+        return MulDiv(In - InOrg, abs(OutExt), abs(InExt)) + OutOrg;
     else
-        return ((abs(InExt) - (In - InOrg))*abs(OutExt) / abs(InExt)) + OutOrg;
+        return MulDiv(abs(InExt) - (In - InOrg), abs(OutExt), abs(InExt)) + OutOrg;
 }
 
 LPOPENCONTEXT AddPacketToContextQueue(LPWTPACKET packet, HWND hwnd)
-- 
2.23.0




More information about the wine-devel mailing list