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