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