From b623b2acef9ee6fd6eb7ab4895d0eba846b63301 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 22 Sep 2024 01:02:59 +0200 Subject: [PATCH] wayland: Be more careful with mimetypes Sometimes, jokers send us 'mimetypes' like DELETE or org.webkitgtk.WebKit.custom-pasteboard-data, and gdk_intern_mime_type will return NULL for such things. Handle that by just closing the fd. Better than running into an assertion further down. --- gdk/wayland/gdkclipboard-wayland.c | 6 ++++++ gdk/wayland/gdkdrag-wayland.c | 9 +++++++-- gdk/wayland/gdkprimary-wayland.c | 6 ++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/gdk/wayland/gdkclipboard-wayland.c b/gdk/wayland/gdkclipboard-wayland.c index 1fadd76ff9..2ba8a99106 100644 --- a/gdk/wayland/gdkclipboard-wayland.c +++ b/gdk/wayland/gdkclipboard-wayland.c @@ -110,6 +110,12 @@ gdk_wayland_clipboard_data_source_send (void *data, source, mime_type, fd); mime_type = gdk_intern_mime_type (mime_type); + if (!mime_type) + { + close (fd); + return; + } + stream = g_unix_output_stream_new (fd, TRUE); gdk_clipboard_write_async (GDK_CLIPBOARD (cb), diff --git a/gdk/wayland/gdkdrag-wayland.c b/gdk/wayland/gdkdrag-wayland.c index bbcad35eed..2f3dfb92dd 100644 --- a/gdk/wayland/gdkdrag-wayland.c +++ b/gdk/wayland/gdkdrag-wayland.c @@ -250,8 +250,13 @@ data_source_send (void *data, "%p: data source send request for %s on fd %d\n", source, mime_type, fd); - //mime_type = gdk_intern_mime_type (mime_type); - mime_type = g_intern_string (mime_type); + mime_type = gdk_intern_mime_type (mime_type); + if (!mime_type) + { + close (fd); + return; + } + stream = g_unix_output_stream_new (fd, TRUE); gdk_drag_write_async (drag, diff --git a/gdk/wayland/gdkprimary-wayland.c b/gdk/wayland/gdkprimary-wayland.c index e92e2bf99f..015bc8016e 100644 --- a/gdk/wayland/gdkprimary-wayland.c +++ b/gdk/wayland/gdkprimary-wayland.c @@ -227,6 +227,12 @@ gdk_wayland_primary_data_source_send (void *da source, mime_type, fd); mime_type = gdk_intern_mime_type (mime_type); + if (!mime_type) + { + close (fd); + return; + } + stream = g_unix_output_stream_new (fd, TRUE); gdk_clipboard_write_async (GDK_CLIPBOARD (cb),