[PATCH 2/2] ole32: Avoid calling QueryContinueDrag recursively.

Roman Pišl rpisl at seznam.cz
Sun Feb 16 07:05:36 CST 2020


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48569

Signed-off-by: Roman Pišl <rpisl at seznam.cz>
---
 dlls/ole32/ole2.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 757458ad20..9d404abba5 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -62,6 +62,7 @@ typedef struct tagTrackerWindowInfo
   DWORD        dwOKEffect;
   DWORD*       pdwEffect;
   BOOL       trackingDone;
+  BOOL         inTrackCall;
   HRESULT      returnValue;
 
   BOOL       escPressed;
@@ -767,6 +768,7 @@ HRESULT WINAPI DoDragDrop (
   trackerInfo.pdwEffect         = pdwEffect;
   trackerInfo.trackingDone      = FALSE;
   trackerInfo.escPressed        = FALSE;
+  trackerInfo.inTrackCall       = FALSE;
   trackerInfo.curTargetHWND     = 0;
   trackerInfo.curDragTarget     = 0;
 
@@ -2163,7 +2165,11 @@ static LRESULT WINAPI OLEDD_DragTrackerWindowProc(
     {
       TrackerWindowInfo *trackerInfo = (TrackerWindowInfo*)GetWindowLongPtrA(hwnd, 0);
       if (trackerInfo->trackingDone) break;
+      if (trackerInfo->inTrackCall) break;
+
+      trackerInfo->inTrackCall = TRUE;
       OLEDD_TrackStateChange(trackerInfo);
+      trackerInfo->inTrackCall = FALSE;
       break;
     }
     case WM_DESTROY:
-- 
2.20.1




More information about the wine-devel mailing list