Francois Gouget : server: Remove obsolete synthesized formats in release_clipboard().
Alexandre Julliard
julliard at winehq.org
Tue Aug 10 16:24:07 CDT 2021
Module: wine
Branch: master
Commit: a716b13974b43bd0dd80322fd8584cc96f2f8f3b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a716b13974b43bd0dd80322fd8584cc96f2f8f3b
Author: Francois Gouget <fgouget at codeweavers.com>
Date: Tue Aug 10 05:51:46 2021 +0200
server: Remove obsolete synthesized formats in release_clipboard().
Synthesized formats must be removed too if the format they depend on has
been removed.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51496
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/clipboard.c | 7 +++----
server/clipboard.c | 6 +++++-
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c
index 8515ba5b88a..b673fc1add5 100644
--- a/dlls/user32/tests/clipboard.c
+++ b/dlls/user32/tests/clipboard.c
@@ -973,7 +973,7 @@ static void test_synthesized(void)
/* CF_UNICODETEXT and derivatives, CF_TEXT + CF_OEMTEXT, should be gone */
count = CountClipboardFormats();
- todo_wine ok(count == 1, "count %u\n", count );
+ ok(count == 1, "count %u\n", count );
cf = EnumClipboardFormats( 0 );
ok(cf == CF_LOCALE, "unexpected clipboard format %u\n", cf);
@@ -984,10 +984,9 @@ static void test_synthesized(void)
ok(r, "gle %d\n", GetLastError());
SetLastError(0xdeadbeef);
- data = (void*)1; if (broken(1)) /* FIXME Crashes in Wine */
data = GetClipboardData( CF_TEXT );
- ok(GetLastError() == 0xdeadbeef, "unexpected last error %d\n", GetLastError());
- todo_wine ok(!data, "GetClipboardData() should have returned NULL\n");
+ ok(GetLastError() == 0xdeadbeef, "bad last error %d\n", GetLastError());
+ ok(!data, "GetClipboardData() should have returned NULL\n");
r = CloseClipboard();
ok(r, "gle %d\n", GetLastError());
diff --git a/server/clipboard.c b/server/clipboard.c
index 1c4875ff726..eb9bd4f7020 100644
--- a/server/clipboard.c
+++ b/server/clipboard.c
@@ -303,7 +303,11 @@ static user_handle_t release_clipboard( struct clipboard *clipboard )
/* free the delayed-rendered formats, since we no longer have an owner to render them */
LIST_FOR_EACH_ENTRY_SAFE( format, next, &clipboard->formats, struct clip_format, entry )
{
- if (format->data || format->from) continue;
+ if (format->data) continue;
+ /* format->from is earlier in the list and thus has already been
+ * removed if not available anymore (it is also < CF_MAX)
+ */
+ if (format->from && HAS_FORMAT( clipboard->format_map, format->from )) continue;
list_remove( &format->entry );
if (format->id < CF_MAX) clipboard->format_map &= ~(1 << format->id);
clipboard->format_count--;
More information about the wine-cvs
mailing list