diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2023-03-05 11:19:32 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2023-03-05 11:24:49 -0300 |
commit | 0322bcf54cf1fc37ff74b87fd36e282dc1cf7863 (patch) | |
tree | ea19b6e8397094e1ef665e629d7e4e6c5bd9f6b6 /src/utils/gcal-source-discoverer.c | |
parent | 075b91d2790907188e728344c6336443ee2a897e (diff) | |
download | gnome-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/utils/gcal-source-discoverer.c')
-rw-r--r-- | src/utils/gcal-source-discoverer.c | 28 |
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); |