diff --git a/README.md b/README.md index a60f4edc..c8d17902 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Wine. All those differences are also documented on the Included bug fixes and improvements ----------------------------------- -**Bug fixes and features included in the next upcoming release [8]:** +**Bug fixes and features included in the next upcoming release [9]:** * Add stub for D3DXFrameFind ([Wine Bug #38334](https://bugs.winehq.org/show_bug.cgi?id=38334)) * Add stub for advapi32.ImpersonateAnonymousToken @@ -47,6 +47,7 @@ Included bug fixes and improvements * Emulate \Device\Null using /dev/null ([Wine Bug #38107](https://bugs.winehq.org/show_bug.cgi?id=38107)) * Fix regression caused by blacklisting supported OpenGL extensions ([Wine Bug #38480](https://bugs.winehq.org/show_bug.cgi?id=38480)) * Ignore garbage after decoding gif lines ([Wine Bug #32227](https://bugs.winehq.org/show_bug.cgi?id=32227)) +* OpenClipboard with current owner shouldn't fail ([Wine Bug #2805](https://bugs.winehq.org/show_bug.cgi?id=2805)) * Return failure in NtProtectVirtualMemory when last argument is omitted ([Wine Bug #38495](https://bugs.winehq.org/show_bug.cgi?id=38495)) * Support for FileFsFullSizeInformation information class diff --git a/debian/changelog b/debian/changelog index f21c8fba..5eb4b981 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,7 @@ wine-staging (1.7.42) UNRELEASED; urgency=low * Added patch with stub for D3DXFrameFind. * Added patch to return failure in NtProtectVirtualMemory when last argument is omitted. * Added patch to emulate \Device\Null using /dev/null. + * Added patch to make sure OpenClipboard with current owner doesn't fail. * Removed patch to avoid crash when trying to bind mshtml event scripts to window (fixed upstream). * Removed patch for stub of ntdll.WinSqmIsOptedIn (fixed upstream). * Removed patch to fix issues with invalid console handles for new processes (accepted upstream). diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 06ba071e..6fc25678 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -188,6 +188,7 @@ patch_enable_all () enable_server_JobObjects="$1" enable_server_Key_State="$1" enable_server_Misc_ACL="$1" + enable_server_OpenClipboard="$1" enable_server_OpenProcess="$1" enable_server_PeekMessage="$1" enable_server_Realtime_Priority="$1" @@ -642,6 +643,9 @@ patch_enable () server-Misc_ACL) enable_server_Misc_ACL="$2" ;; + server-OpenClipboard) + enable_server_OpenClipboard="$2" + ;; server-OpenProcess) enable_server_OpenProcess="$2" ;; @@ -4265,6 +4269,21 @@ if test "$enable_server_Key_State" -eq 1; then ) >> "$patchlist" fi +# Patchset server-OpenClipboard +# | +# | This patchset fixes the following Wine bugs: +# | * [#2805] OpenClipboard with current owner shouldn't fail +# | +# | Modified files: +# | * dlls/user32/tests/clipboard.c, server/clipboard.c +# | +if test "$enable_server_OpenClipboard" -eq 1; then + patch_apply server-OpenClipboard/0001-server-OpenClipboard-with-current-owner-shouldn-t-fa.patch + ( + echo '+ { "Sebastian Lackner", "server: OpenClipboard() with current owner shouldn'\''t fail.", 1 },'; + ) >> "$patchlist" +fi + # Patchset server-PeekMessage # | # | This patchset fixes the following Wine bugs: diff --git a/patches/server-OpenClipboard/0001-server-OpenClipboard-with-current-owner-shouldn-t-fa.patch b/patches/server-OpenClipboard/0001-server-OpenClipboard-with-current-owner-shouldn-t-fa.patch new file mode 100644 index 00000000..5167c455 --- /dev/null +++ b/patches/server-OpenClipboard/0001-server-OpenClipboard-with-current-owner-shouldn-t-fa.patch @@ -0,0 +1,65 @@ +From 224f0263e0d56336f6baaafd09baddff64679a9b Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sun, 3 May 2015 07:34:10 +0200 +Subject: server: OpenClipboard() with current owner shouldn't fail. + +Based on a patch by Nikolay Sivov. +--- + dlls/user32/tests/clipboard.c | 16 +++++++++++++++- + server/clipboard.c | 3 ++- + 2 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c +index 40218be..8fd4963 100644 +--- a/dlls/user32/tests/clipboard.c ++++ b/dlls/user32/tests/clipboard.c +@@ -35,9 +35,18 @@ static BOOL is_win9x = FALSE; + expected_error, GetLastError()); \ + } while (0) + ++static DWORD WINAPI open_clipboard_thread(LPVOID arg) ++{ ++ HWND hWnd = arg; ++ ok(OpenClipboard(hWnd), "OpenClipboard second time in the same hwnd failed\n"); ++ return 0; ++} ++ + static void test_ClipboardOwner(void) + { ++ HANDLE thread; + HWND hWnd1, hWnd2; ++ DWORD dwret; + BOOL ret; + + SetLastError(0xdeadbeef); +@@ -66,7 +75,12 @@ static void test_ClipboardOwner(void) + ok( ret, "CloseClipboard error %d\n", GetLastError()); + + ok(OpenClipboard(hWnd1), "OpenClipboard failed\n"); +- todo_wine ok(OpenClipboard(hWnd1), "OpenClipboard second time in the same hwnd failed\n"); ++ thread = CreateThread(NULL, 0, open_clipboard_thread, hWnd1, 0, NULL); ++ ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError()); ++ dwret = WaitForSingleObject(thread, 1000); ++ ok(dwret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", dwret); ++ CloseHandle(thread); ++ ok(OpenClipboard(hWnd1), "OpenClipboard second time in the same hwnd failed\n"); + + SetLastError(0xdeadbeef); + ret = OpenClipboard(hWnd2); +diff --git a/server/clipboard.c b/server/clipboard.c +index 0c39319..7f94103 100644 +--- a/server/clipboard.c ++++ b/server/clipboard.c +@@ -204,7 +204,8 @@ DECL_HANDLER(set_clipboard_info) + if (clipboard->open_thread) + { + /* clipboard already opened */ +- set_error(STATUS_WAS_LOCKED); ++ if (clipboard->open_win != req->clipboard) ++ set_error(STATUS_WAS_LOCKED); + return; + } + +-- +2.3.5 + diff --git a/patches/server-OpenClipboard/definition b/patches/server-OpenClipboard/definition new file mode 100644 index 00000000..248a785d --- /dev/null +++ b/patches/server-OpenClipboard/definition @@ -0,0 +1 @@ +Fixes: [2805] OpenClipboard with current owner shouldn't fail