[spice-gtk v1] gtk-session: reply agent's clipboard request on failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Victor Toso <me@xxxxxxxxxxxxxx>

We need to reply back to the agent all clipboard requests even in case
of failure otherwise it will have a pending request. The following
error message can be seen in afterwards, when client sends down some
clipboard data:

 > clipboard: selection requests pending on clipboard ownership
 > change, clearing

An easy way to reproduce this is:
1-) In client, copy image from lo-draw (selection or ctrl+c)
2-) In guest, paste it to GEdit (mouse3 our ctrl+v)
3-) Move to the client
4-) Move back to the guest
5-) see error on vdagent logs

The reason for failure is that client's clipboard contains different
data type (image) then what was requested from guest's editor (text)

While at it, include extra debug message as it might be hard to
identify why clipboard did not work.

Resolves: rhbz#1409854
Signed-off-by: Victor Toso <victortoso@xxxxxxxxxx>
---
 src/spice-gtk-session.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
index 0426d8f..315bc26 100644
--- a/src/spice-gtk-session.c
+++ b/src/spice-gtk-session.c
@@ -940,28 +940,33 @@ static void clipboard_received_text_cb(GtkClipboard *clipboard,
     if (self == NULL)
         return;
 
+    selection = get_selection_from_clipboard(self->priv, clipboard);
+    g_return_if_fail(selection != -1);
+
     if (text == NULL) {
         SPICE_DEBUG("Failed to retrieve clipboard text");
-        return;
+        goto notify_agent;
     }
 
     g_return_if_fail(SPICE_IS_GTK_SESSION(self));
 
-    selection = get_selection_from_clipboard(self->priv, clipboard);
-    g_return_if_fail(selection != -1);
-
     len = strlen(text);
     if (!check_clipboard_size_limits(self, len)) {
-        return;
+        SPICE_DEBUG("Failed sized limits of clipboard text (%d bytes)", len);
+        len = 0;
+        goto notify_agent;
     }
 
     /* gtk+ internal utf8 newline is always LF, even on windows */
     conv = fixup_clipboard_text(self, text, &len);
     if (!check_clipboard_size_limits(self, len)) {
-        g_free(conv);
-        return;
+        SPICE_DEBUG("Failed sized limits of clipboard text (%d bytes)", len);
+        g_clear_pointer(&conv, g_free);
+        len = 0;
+        goto notify_agent;
     }
 
+notify_agent:
     spice_main_clipboard_selection_notify(self->priv->main, selection,
                                           VD_AGENT_CLIPBOARD_UTF8_TEXT,
                                           (guchar *)(conv ?: text), len);
-- 
2.9.3

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]