From 08217c949d2b907e33117118760f5c7c3fc67246 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 8 Feb 2026 20:43:48 +0530 Subject: [PATCH] Fix crash on self drop --- glfw/cocoa_window.m | 11 +++++++---- glfw/wl_window.c | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index 949e4c179..7e6b9b266 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -1721,10 +1721,12 @@ - (BOOL)performDragOperation:(id )sender bool from_self = ([sender draggingSource] != nil); _GLFWDropData *d = &window->ns.drop_data; size_t mime_count = _glfwInputDropEvent(window, GLFW_DROP_DROP, xpos, ypos, d->mimes, d->mimes_count, from_self); - update_drop_state(window, mime_count); - window->ns.drop_data.pasteboard = [[sender draggingPasteboard] retain]; - for (size_t i = 0; i < window->ns.drop_data.mimes_count; i++) - _glfwPlatformRequestDropData(window, window->ns.drop_data.mimes[i]); + if (d->mimes) { + update_drop_state(window, mime_count); + window->ns.drop_data.pasteboard = [[sender draggingPasteboard] retain]; + for (size_t i = 0; i < d->mimes_count; i++) + _glfwPlatformRequestDropData(window, d->mimes[i]); + } return YES; } @@ -2523,6 +2525,7 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window) GLFWWindow *w = window->ns.object; if (_glfw.ns.disabledCursorWindow == window) _glfw.ns.disabledCursorWindow = NULL; + free_drop_data(window); [w orderOut:nil]; diff --git a/glfw/wl_window.c b/glfw/wl_window.c index e5a27f5af..238b2296d 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -2616,6 +2616,7 @@ drop(void *data UNUSED, struct wl_data_device *wl_data_device UNUSED) { while (window) { if (window->wl.surface == offer->surface) { size_t num_mimes = _glfwInputDropEvent(window, GLFW_DROP_DROP, 0, 0, offer->mimes, offer->mimes_count, offer->is_self_offer); + if (!offer->mimes) { destroy_data_offer(offer); return; } for (size_t i = 0; i < num_mimes; i++) request_drop_data(offer, offer->mimes[i]); break; }