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
This commit is contained in:
Georges Basile Stavracas Neto
2023-03-05 11:24:49 -03:00
parent 075b91d279
commit 0322bcf54c
2 changed files with 65 additions and 1 deletions
+27 -1
View File
@@ -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);