summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/qwindowsclipboard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsclipboard.cpp')
-rw-r--r--src/plugins/platforms/windows/qwindowsclipboard.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp
index b66a16ae58..cf6cb199c7 100644
--- a/src/plugins/platforms/windows/qwindowsclipboard.cpp
+++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp
@@ -178,6 +178,20 @@ void QWindowsClipboard::unregisterViewer()
}
}
+static bool isProcessBeingDebugged(HWND hwnd)
+{
+ DWORD pid = 0;
+ if (!GetWindowThreadProcessId(hwnd, &pid) || !pid)
+ return false;
+ const HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
+ if (!processHandle)
+ return false;
+ BOOL debugged = FALSE;
+ CheckRemoteDebuggerPresent(processHandle, &debugged);
+ CloseHandle(processHandle);
+ return debugged != FALSE;
+}
+
void QWindowsClipboard::propagateClipboardMessage(UINT message, WPARAM wParam, LPARAM lParam) const
{
if (!m_nextClipboardViewer)
@@ -189,6 +203,12 @@ void QWindowsClipboard::propagateClipboardMessage(UINT message, WPARAM wParam, L
qWarning("%s: Cowardly refusing to send clipboard message to hung application...", Q_FUNC_INFO);
return;
}
+ // Also refuse if the process is being debugged, specifically, if it is
+ // displaying a runtime assert, which is not caught by isHungAppWindow().
+ if (isProcessBeingDebugged(m_nextClipboardViewer)) {
+ qWarning("%s: Cowardly refusing to send clipboard message to application under debugger...", Q_FUNC_INFO);
+ return;
+ }
SendMessage(m_nextClipboardViewer, message, wParam, lParam);
}