Control: tags -1 patch I confirm that this patch fixes the problem.
Berto
diff -Nru gnome-calendar-43.1/debian/changelog gnome-calendar-43.1/debian/changelog --- gnome-calendar-43.1/debian/changelog 2022-10-18 16:09:27.000000000 +0200 +++ gnome-calendar-43.1/debian/changelog 2023-03-20 18:25:22.000000000 +0100 @@ -1,3 +1,10 @@ +gnome-calendar (43.1-2) unstable; urgency=high + + * debian/patches/validate-uri.patch: + - Fix crash when adding an url manually (Closes: #1033239) + + -- Alberto Garcia <[email protected]> Mon, 20 Mar 2023 18:25:22 +0100 + gnome-calendar (43.1-1) unstable; urgency=high * New upstream release (LP: #1993308) diff -Nru gnome-calendar-43.1/debian/patches/series gnome-calendar-43.1/debian/patches/series --- gnome-calendar-43.1/debian/patches/series 2022-10-18 16:09:27.000000000 +0200 +++ gnome-calendar-43.1/debian/patches/series 2023-03-20 18:16:08.000000000 +0100 @@ -0,0 +1 @@ +validate-uri.patch diff -Nru gnome-calendar-43.1/debian/patches/validate-uri.patch gnome-calendar-43.1/debian/patches/validate-uri.patch --- gnome-calendar-43.1/debian/patches/validate-uri.patch 1970-01-01 01:00:00.000000000 +0100 +++ gnome-calendar-43.1/debian/patches/validate-uri.patch 2023-03-20 18:25:22.000000000 +0100 @@ -0,0 +1,121 @@ +From: Georges Basile Stavracas Neto <[email protected]> +Subject: Test URI before discovery +Bug: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/794 +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1033239 +Origin: https://gitlab.gnome.org/GNOME/gnome-calendar/-/commit/0322bcf54cf1fc37ff74b87fd36e282dc1cf7863 +Index: gnome-calendar-43.1/src/utils/gcal-source-discoverer.c +=================================================================== +--- gnome-calendar-43.1.orig/src/utils/gcal-source-discoverer.c ++++ gnome-calendar-43.1/src/utils/gcal-source-discoverer.c +@@ -183,6 +183,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 +@@ -221,7 +241,7 @@ discover_file_in_thread (DiscovererData + + GCAL_ENTRY; + +- guri = g_uri_parse (data->uri, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, NULL); ++ guri = create_and_validate_uri (data->uri, error); + + if (!guri) + GCAL_RETURN (NULL); +@@ -277,6 +297,7 @@ discover_webdav_in_thread (DiscovererDat + 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; +@@ -284,6 +305,11 @@ discover_webdav_in_thread (DiscovererDat + + 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); +Index: gnome-calendar-43.1/tests/test-discoverer.c +=================================================================== +--- gnome-calendar-43.1.orig/tests/test-discoverer.c ++++ gnome-calendar-43.1/tests/test-discoverer.c +@@ -82,6 +82,43 @@ discoverer_file (void) + + /*********************************************************************************************************************/ + ++static void ++discoverer_invalid_https_only_cb (GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ g_autoptr (GPtrArray) sources = NULL; ++ g_autoptr (GError) error = NULL; ++ GMainLoop *mainloop = user_data; ++ ++ sources = gcal_discover_sources_from_uri_finish (result, &error); ++ g_assert_error (error, G_URI_ERROR, G_URI_ERROR_FAILED); ++ g_assert_null (sources); ++ ++ g_main_loop_quit (mainloop); ++} ++ ++static void ++discoverer_invalid_https_only (void) ++{ ++ g_autoptr (GMainLoop) mainloop = NULL; ++ ++ g_test_bug ("794"); ++ ++ mainloop = g_main_loop_new (NULL, FALSE); ++ ++ gcal_discover_sources_from_uri ("https://", ++ NULL, ++ NULL, ++ NULL, ++ discoverer_invalid_https_only_cb, ++ mainloop); ++ ++ g_main_loop_run (mainloop); ++} ++ ++/*********************************************************************************************************************/ ++ + #if 0 + + static void +@@ -183,6 +220,7 @@ main (gint argc, + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/discoverer/file", discoverer_file); ++ g_test_add_func ("/discoverer/invalid-https-only", discoverer_invalid_https_only); + //g_test_add_func ("/discoverer/webdav/unauthorized", discoverer_webdav_unauthorized); + + return g_test_run ();

