summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-05 11:19:32 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-05 11:24:49 -0300
commit0322bcf54cf1fc37ff74b87fd36e282dc1cf7863 (patch)
treeea19b6e8397094e1ef665e629d7e4e6c5bd9f6b6 /src
parent075b91d2790907188e728344c6336443ee2a897e (diff)
downloadgnome-calendar-0322bcf54cf1fc37ff74b87fd36e282dc1cf7863.tar.gz
utils/source-discoverer: Test URI before discovery
This makes sure that we have a valid host set. This check is copies from Soup's private SOUP_URI_IS_VALID() macro. Add a test for this behavior. Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/794
Diffstat (limited to 'src')
-rw-r--r--src/utils/gcal-source-discoverer.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/utils/gcal-source-discoverer.c b/src/utils/gcal-source-discoverer.c
index 4b32e11a..53cb0b94 100644
--- a/src/utils/gcal-source-discoverer.c
+++ b/src/utils/gcal-source-discoverer.c
@@ -208,6 +208,26 @@ is_authentication_error (gint code)
return FALSE;
}
+static GUri *
+create_and_validate_uri (const gchar *uri,
+ GError **error)
+{
+ g_autoptr (GUri) guri = NULL;
+
+ guri = g_uri_parse (uri, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, error);
+
+ if (!guri)
+ GCAL_RETURN (NULL);
+
+ if (!g_uri_get_host (guri) || g_uri_get_host (guri)[0] == '\0')
+ {
+ g_set_error (error, G_URI_ERROR, G_URI_ERROR_FAILED, "Invalid URI");
+ return NULL;
+ }
+
+ return g_steal_pointer (&guri);
+}
+
/*
* Callbacks
@@ -250,7 +270,7 @@ discover_file_in_thread (DiscovererData *data,
GCAL_ENTRY;
- guri = g_uri_parse (data->uri, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, error);
+ guri = create_and_validate_uri (data->uri, error);
if (!guri)
GCAL_RETURN (NULL);
@@ -319,6 +339,7 @@ discover_webdav_in_thread (DiscovererData *data,
g_autoptr (ESource) source = NULL;
g_autoptr (GError) local_error = NULL;
g_autofree gchar *certificate_pem = NULL;
+ g_autoptr (GUri) guri = NULL;
GTlsCertificateFlags flags;
GSList *discovered_sources = NULL;
GSList *user_addresses = NULL;
@@ -326,6 +347,11 @@ discover_webdav_in_thread (DiscovererData *data,
GCAL_ENTRY;
+ guri = create_and_validate_uri (data->uri, error);
+
+ if (!guri)
+ GCAL_RETURN (NULL);
+
credentials = e_named_parameters_new ();
e_named_parameters_set (credentials, E_SOURCE_CREDENTIAL_USERNAME, data->username);
e_named_parameters_set (credentials, E_SOURCE_CREDENTIAL_PASSWORD, data->password);