1From 511627b7356af527c85c049e2020a36694d7de54 Mon Sep 17 00:00:00 2001 2From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net> 3Date: Fri, 2 Sep 2022 18:56:35 +0200 4Subject: [PATCH] tests/dbus-appinfo: Add test case for flatpak opening an 5 invalid file 6 7We were testing the case in which we were opening an actual file, and so 8potentially using a fd-list, however we were missing the case in which a file 9was not existent. 10 11And in such case we are incidentally hitting a leak now. 12 13Conflict:NA 14Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/511627b7356af527c85c049e2020a36694d7de54 15 16--- 17 gio/tests/dbus-appinfo.c | 79 ++++++++++++++++++++++++++++++++++++++++ 18 1 file changed, 79 insertions(+) 19 20diff --git a/gio/tests/dbus-appinfo.c b/gio/tests/dbus-appinfo.c 21index 2017e02df2..91e76403c6 100644 22--- a/gio/tests/dbus-appinfo.c 23+++ b/gio/tests/dbus-appinfo.c 24@@ -360,6 +360,84 @@ test_flatpak_doc_export (void) 25 g_object_unref (flatpak_appinfo); 26 } 27 28+static void 29+on_flatpak_launch_invalid_uri_finish (GObject *object, 30+ GAsyncResult *result, 31+ gpointer user_data) 32+{ 33+ GApplication *app = user_data; 34+ GError *error = NULL; 35+ 36+ g_app_info_launch_uris_finish (G_APP_INFO (object), result, &error); 37+ g_assert_no_error (error); 38+ 39+ g_application_release (app); 40+} 41+ 42+static void 43+on_flatpak_activate_invalid_uri (GApplication *app, 44+ gpointer user_data) 45+{ 46+ GDesktopAppInfo *flatpak_appinfo = user_data; 47+ GList *uris; 48+ 49+ /* The app will be released in on_flatpak_launch_uris_finish */ 50+ g_application_hold (app); 51+ 52+ uris = g_list_prepend (NULL, "file:///hopefully/an/invalid/path.desktop"); 53+ g_app_info_launch_uris_async (G_APP_INFO (flatpak_appinfo), uris, NULL, 54+ NULL, on_flatpak_launch_invalid_uri_finish, app); 55+ g_list_free (uris); 56+} 57+ 58+static void 59+on_flatpak_open_invalid_uri (GApplication *app, 60+ GFile **files, 61+ gint n_files, 62+ const char *hint) 63+{ 64+ GFile *f; 65+ 66+ g_assert_cmpint (n_files, ==, 1); 67+ g_test_message ("on_flatpak_open received file '%s'", g_file_peek_path (files[0])); 68+ 69+ /* The file has been exported via the document portal */ 70+ f = g_file_new_for_uri ("file:///hopefully/an/invalid/path.desktop"); 71+ g_assert_true (g_file_equal (files[0], f)); 72+ g_object_unref (f); 73+} 74+ 75+static void 76+test_flatpak_missing_doc_export (void) 77+{ 78+ const gchar *argv[] = { "myapp", NULL }; 79+ gchar *desktop_file = NULL; 80+ GDesktopAppInfo *flatpak_appinfo; 81+ GApplication *app; 82+ int status; 83+ 84+ g_test_summary ("Test that files launched via Flatpak apps are made available via the document portal."); 85+ 86+ desktop_file = g_test_build_filename (G_TEST_DIST, 87+ "org.gtk.test.dbusappinfo.flatpak.desktop", 88+ NULL); 89+ flatpak_appinfo = g_desktop_app_info_new_from_filename (desktop_file); 90+ g_assert_nonnull (flatpak_appinfo); 91+ 92+ app = g_application_new ("org.gtk.test.dbusappinfo.flatpak", 93+ G_APPLICATION_HANDLES_OPEN); 94+ g_signal_connect (app, "activate", G_CALLBACK (on_flatpak_activate_invalid_uri), 95+ flatpak_appinfo); 96+ g_signal_connect (app, "open", G_CALLBACK (on_flatpak_open_invalid_uri), NULL); 97+ 98+ status = g_application_run (app, 1, (gchar **) argv); 99+ g_assert_cmpint (status, ==, 0); 100+ 101+ g_object_unref (app); 102+ g_object_unref (flatpak_appinfo); 103+ g_free (desktop_file); 104+} 105+ 106 int 107 main (int argc, char **argv) 108 { 109@@ -367,6 +445,7 @@ main (int argc, char **argv) 110 111 g_test_add_func ("/appinfo/dbusappinfo", test_dbus_appinfo); 112 g_test_add_func ("/appinfo/flatpak-doc-export", test_flatpak_doc_export); 113+ g_test_add_func ("/appinfo/flatpak-missing-doc-export", test_flatpak_missing_doc_export); 114 115 return session_bus_run (); 116 } 117-- 118GitLab 119 120