urilauncher: Validate the uri
authorMatthias Clasen <mclasen@redhat.com>
Thu, 11 May 2023 22:33:23 +0000 (18:33 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 11 May 2023 22:34:26 +0000 (18:34 -0400)
We don't want to send nonsense to the portal.

Fixes: #5829
gtk/gtkurilauncher.c

index bf6e2e260be9f6d081f5624a9c462a6010dbc159..7410a8da2aa7ff632723a412ec2da92ce68b6e5f 100644 (file)
@@ -277,13 +277,14 @@ G_GNUC_END_IGNORE_DEPRECATIONS
  * Since: 4.10
  */
 void
-gtk_uri_launcher_launch (GtkUriLauncher     *self,
-                          GtkWindow           *parent,
-                          GCancellable        *cancellable,
-                          GAsyncReadyCallback  callback,
-                          gpointer             user_data)
+gtk_uri_launcher_launch (GtkUriLauncher      *self,
+                         GtkWindow           *parent,
+                         GCancellable        *cancellable,
+                         GAsyncReadyCallback  callback,
+                         gpointer             user_data)
 {
   GTask *task;
+  GError *error = NULL;
 
   g_return_if_fail (GTK_IS_URI_LAUNCHER (self));
 
@@ -299,6 +300,15 @@ gtk_uri_launcher_launch (GtkUriLauncher     *self,
       return;
     }
 
+  if (!g_uri_is_valid (self->uri, G_URI_FLAGS_NONE, &error))
+    {
+      g_task_return_new_error (task,
+                               GTK_DIALOG_ERROR, GTK_DIALOG_ERROR_FAILED,
+                               "%s is not a valid uri: %s", self->uri, error->message);
+      g_error_free (error);
+      return;
+    }
+
 #ifndef G_OS_WIN32
   if (gtk_openuri_portal_is_available ())
     gtk_openuri_portal_open_uri_async (self->uri, parent, cancellable, open_done, task);
@@ -325,8 +335,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
  */
 gboolean
 gtk_uri_launcher_launch_finish (GtkUriLauncher  *self,
-                                 GAsyncResult     *result,
-                                 GError          **error)
+                                GAsyncResult    *result,
+                                GError         **error)
 {
   g_return_val_if_fail (GTK_IS_URI_LAUNCHER (self), FALSE);
   g_return_val_if_fail (g_task_is_valid (result, self), FALSE);