platform-implement-win.cpp: Fix invalid pointer cast in 64 bits systems 66/242166/1
authorWander Lairson Costa <wander.lairson@gmail.com>
Wed, 22 Jul 2020 12:59:32 +0000 (09:59 -0300)
committerVíctor Cebollada <v.cebollada@samsung.com>
Mon, 24 Aug 2020 15:04:33 +0000 (15:04 +0000)
The ID returned by the function SetTimer is actually a pointer to a data
structure storing the timer information. Originally the return type of
the function was int, which is 32 bits, but in Windows 64 bits it is not
enough to store a pointer value.

We convert the timer ID type to the proper type intptr_t, which is an
integral type guaranteed to be big enough to hold a pointer value.

Change-Id: I207b8e2538d73d583ed6df1192af0fbbdb6bed96

dali/internal/system/windows/timer-impl-win.cpp
dali/internal/window-system/windows/platform-implement-win.cpp
dali/internal/window-system/windows/platform-implement-win.h

index 7691199..ae9335d 100755 (executable)
@@ -51,7 +51,7 @@ struct Timer::Impl
   {
   }
 
-  int mId;
+  intptr_t mId;
 
   unsigned int mInterval;
 };
index 65d76b4..9322e26 100755 (executable)
@@ -241,20 +241,20 @@ void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT_PTR nTimerid, DWORD dwTime)
   info->callback( info->data );
 }
 
-int SetTimer(int interval, timerCallback callback, void *data)
+intptr_t SetTimer(int interval, timerCallback callback, void *data)
 {
   TTimerCallbackInfo *callbackInfo = new TTimerCallbackInfo;
   callbackInfo->data = data;
   callbackInfo->callback = callback;
   callbackInfo->hWnd = ::GetActiveWindow();
 
-  UINT_PTR timerID = (UINT_PTR)callbackInfo;
+  INT_PTR timerID = (INT_PTR)callbackInfo;
   ::SetTimer( callbackInfo->hWnd, timerID, interval, TimerProc );
 
   return timerID;
 }
 
-void KillTimer(int id)
+void KillTimer(intptr_t id)
 {
   TTimerCallbackInfo *info = (TTimerCallbackInfo*)id;
   ::KillTimer( info->hWnd, id );
index e84dce7..3cc86ba 100755 (executable)
@@ -45,9 +45,9 @@ bool PostWinThreadMessage(
 \r
 using timerCallback = bool(*)(void *data);\r
 \r
-int SetTimer(int interval, timerCallback callback, void *data);\r
+intptr_t SetTimer(int interval, timerCallback callback, void *data);\r
 \r
-void KillTimer(int id);\r
+void KillTimer(intptr_t id);\r
 \r
 const char* GetKeyName( int keyCode );\r
 \r