https://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome/-/commit/7c440350b17a6007d2054db741340993b6e9aac7

From 7c440350b17a6007d2054db741340993b6e9aac7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 27 May 2024 10:56:00 +0200
Subject: [PATCH] screencast: Fix valgrind warning

Fixes the following warning when cancelling a screen cast dialog.

==343654== Invalid read of size 8
==343654==    at 0x48486A: screen_cast_dialog_handle_free (screencast.c:103)
==343654==    by 0x4848F9: screen_cast_dialog_handle_close (screencast.c:113)
==343654==    by 0x48640D: screen_cast_session_close (screencast.c:916)
==343654==    by 0x489BE6: session_close (session.c:87)
==343654==    by 0x489C7B: handle_close (session.c:117)
==343654==    by 0x410696: _g_dbus_codegen_marshal_BOOLEAN__OBJECT (xdg-desktop-portal-dbus.c:444)
==343654==    by 0x436254: xdp_impl_session_method_marshal_close (xdg-desktop-portal-dbus.c:28756)
==343654==    by 0x4CF9567: g_closure_invoke (gclosure.c:833)
==343654==    by 0x4D0C5FB: signal_emit_unlocked_R.isra.0 (gsignal.c:3928)
==343654==    by 0x4D1311A: signal_emitv_unlocked (gsignal.c:3212)
==343654==    by 0x4D1311A: g_signal_emitv (gsignal.c:3112)
==343654==    by 0x43772F: _xdp_impl_session_skeleton_handle_method_call (xdg-desktop-portal-dbus.c:29485)
==343654==    by 0x4C24D21: g_dbus_interface_method_dispatch_helper (gdbusinterfaceskeleton.c:618)
==343654==  Address 0x1c5acb10 is 16 bytes inside a block of size 40 free'd
==343654==    at 0x4845B2C: free (vg_replace_malloc.c:985)
==343654==    by 0x4848DE: screen_cast_dialog_handle_free (screencast.c:107)
==343654==    by 0x4848F9: screen_cast_dialog_handle_close (screencast.c:113)
==343654==    by 0x484C9C: on_request_handle_close_cb (screencast.c:216)
==343654==    by 0x410696: _g_dbus_codegen_marshal_BOOLEAN__OBJECT (xdg-desktop-portal-dbus.c:444)
==343654==    by 0x42EE5A: xdp_impl_request_method_marshal_close (xdg-desktop-portal-dbus.c:24008)
==343654==    by 0x4CF9567: g_closure_invoke (gclosure.c:833)
==343654==    by 0x4D0BFC8: signal_emit_unlocked_R.isra.0 (gsignal.c:3888)
==343654==    by 0x4D1311A: signal_emitv_unlocked (gsignal.c:3212)
==343654==    by 0x4D1311A: g_signal_emitv (gsignal.c:3112)
==343654==    by 0x42FE83: _xdp_impl_request_skeleton_handle_method_call (xdg-desktop-portal-dbus.c:24590)
==343654==    by 0x4C24D21: g_dbus_interface_method_dispatch_helper (gdbusinterfaceskeleton.c:618)
==343654==    by 0x4C0A837: call_in_idle_cb (gdbusconnection.c:5013)


(cherry picked from commit 9a4dffaf775f6bdb372768f568167fa2c1187257)
---
 src/screencast.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/screencast.c b/src/screencast.c
index 33d1af3..4bc993f 100644
--- a/src/screencast.c
+++ b/src/screencast.c
@@ -211,9 +211,12 @@ on_request_handle_close_cb (XdpImplRequest         *object,
                             GDBusMethodInvocation  *invocation,
                             ScreenCastDialogHandle *dialog_handle)
 {
-  cancel_start_session (dialog_handle->session, 2);
+  ScreenCastSession *screen_cast_session = dialog_handle->session;
 
-  screen_cast_dialog_handle_close (dialog_handle);
+  cancel_start_session (screen_cast_session, 2);
+
+  g_clear_pointer (&screen_cast_session->dialog_handle,
+                   screen_cast_dialog_handle_close);
 
   return FALSE;
 }
-- 
GitLab
