Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package evolution-data-server for openSUSE:Factory checked in at 2022-07-05 12:27:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/evolution-data-server (Old) and /work/SRC/openSUSE:Factory/.evolution-data-server.new.1548 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "evolution-data-server" Tue Jul 5 12:27:09 2022 rev:237 rq:986577 version:3.44.3 Changes: -------- --- /work/SRC/openSUSE:Factory/evolution-data-server/evolution-data-server.changes 2022-06-01 17:33:59.822693657 +0200 +++ /work/SRC/openSUSE:Factory/.evolution-data-server.new.1548/evolution-data-server.changes 2022-07-05 12:27:14.905850601 +0200 @@ -1,0 +2,14 @@ +Fri Jul 1 20:30:07 UTC 2022 - Bj??rn Lie <bjorn....@gmail.com> + +- Update to version 3.44.3: + + Disable hardware acceleration for WebKitGTK. + + ESource: Reconnect signal handlers when the D-Bus 'source' + interface changes. + + Bugs fixed: + - LDAP: Conditionally use 'description' as Note. + - Tests fail with libphonenumber 8.12.49. + - Sanitize IPv6 proxy address before passing it to WebKitGTK. + - Calendar: Correct UNTIL recurrence with midnight start. + - Camel: Read message ID-s with multiple `@`. + +------------------------------------------------------------------- Old: ---- evolution-data-server-3.44.2.tar.xz New: ---- evolution-data-server-3.44.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ evolution-data-server.spec ++++++ --- /var/tmp/diff_new_pack.3SCRqd/_old 2022-07-05 12:27:15.469851427 +0200 +++ /var/tmp/diff_new_pack.3SCRqd/_new 2022-07-05 12:27:15.473851433 +0200 @@ -31,7 +31,7 @@ %bcond_without introspection Name: evolution-data-server -Version: 3.44.2 +Version: 3.44.3 Release: 0 Summary: Evolution Data Server License: LGPL-2.0-only ++++++ evolution-data-server-3.44.2.tar.xz -> evolution-data-server-3.44.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/CMakeLists.txt new/evolution-data-server-3.44.3/CMakeLists.txt --- old/evolution-data-server-3.44.2/CMakeLists.txt 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/CMakeLists.txt 2022-07-01 11:18:42.000000000 +0200 @@ -4,7 +4,7 @@ cmake_policy(VERSION 3.1) project(evolution-data-server - VERSION 3.44.2 + VERSION 3.44.3 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 14) set(PROJECT_BUGREPORT "https://gitlab.gnome.org/GNOME/evolution-data-server/issues/") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/NEWS new/evolution-data-server-3.44.3/NEWS --- old/evolution-data-server-3.44.2/NEWS 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/NEWS 2022-07-01 11:18:42.000000000 +0200 @@ -1,3 +1,17 @@ +Evolution-Data-Server 3.44.3 2022-07-01 +--------------------------------------- + +Bug Fixes: + I#350 - LDAP: Conditionally use 'description' as Note + I#391 - Tests fail with libphonenumber 8.12.49 + I#392 - Sanitize IPv6 proxy address before passing it to WebKitGTK + I#393 - Calendar: Correct UNTIL recurrence with midnight start + I#396 - Camel: Read message ID-s with multiple `@` + +Miscellaneous: + Disable hardware acceleration for WebKitGTK + ESource: Reconnect signal handlers when the D-Bus 'source' interface changes + Evolution-Data-Server 3.44.2 2022-05-27 --------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/src/addressbook/backends/ldap/e-book-backend-ldap.c new/evolution-data-server-3.44.3/src/addressbook/backends/ldap/e-book-backend-ldap.c --- old/evolution-data-server-3.44.2/src/addressbook/backends/ldap/e-book-backend-ldap.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/src/addressbook/backends/ldap/e-book-backend-ldap.c 2022-07-01 11:18:42.000000000 +0200 @@ -262,6 +262,8 @@ #define PROP_TYPE_GROUP (1 << 6) #define PROP_TYPE_CONTACT (1 << 7) /* is ignored for contact lists */ #define PROP_TYPE_FORCE_BINARY (1 << 8) /* to force ";binary" in attribute name */ +#define PROP_WITH_EVOSCHEME (1 << 9) +#define PROP_WITHOUT_EVOSCHEME (1 << 10) gint prop_type; /* the remaining items are only used for the TYPE_COMPLEX props */ @@ -287,6 +289,8 @@ #define GROUP_PROP(fid,a,ctor,ber,cmp) {fid, a, PROP_TYPE_GROUP, ctor, ber, cmp} #define ADDRESS_STRING_PROP(fid,a, ctor) {fid, a, PROP_TYPE_COMPLEX, ctor} #define CONTACT_STRING_PROP(fid,a) {fid, a, PROP_TYPE_STRING | PROP_TYPE_CONTACT} +#define CONTACT_STRING_PROP_WITH_EVOSCHEME(fid,a) {fid, a, PROP_TYPE_STRING | PROP_TYPE_CONTACT | PROP_WITH_EVOSCHEME} +#define CONTACT_STRING_PROP_WITHOUT_EVOSCHEME(fid,a) {fid, a, PROP_TYPE_STRING | PROP_TYPE_CONTACT | PROP_WITHOUT_EVOSCHEME} #define CALENTRY_CONTACT_STRING_PROP(fid,a) {fid, a, PROP_TYPE_STRING | PROP_TYPE_CONTACT | PROP_CALENTRY} /* name fields */ @@ -361,7 +365,8 @@ /* map nickname to displayName */ CONTACT_STRING_PROP (E_CONTACT_NICKNAME, "displayName"), E_STRING_PROP (E_CONTACT_SPOUSE, "spouseName"), - E_STRING_PROP (E_CONTACT_NOTE, "note"), + CONTACT_STRING_PROP_WITH_EVOSCHEME (E_CONTACT_NOTE, "note"), + CONTACT_STRING_PROP_WITHOUT_EVOSCHEME (E_CONTACT_NOTE, "description"), E_COMPLEX_PROP (E_CONTACT_ANNIVERSARY, "anniversary", anniversary_populate, anniversary_ber, anniversary_compare), E_COMPLEX_PROP (E_CONTACT_BIRTH_DATE, "birthDate", birthday_populate, birthday_ber, birthday_compare), E_STRING_PROP (E_CONTACT_MAILER, "mailer"), @@ -1300,6 +1305,13 @@ if (is_list) continue; } + + if (((prop_info[i].prop_type & PROP_WITHOUT_EVOSCHEME) != 0 && + bl->priv->evolutionPersonSupported) || + ((prop_info[i].prop_type & PROP_WITH_EVOSCHEME) != 0 && + !bl->priv->evolutionPersonSupported)) + continue; + if ((prop_info[i].prop_type & PROP_CALENTRY) != 0) { if (!bl->priv->calEntrySupported) continue; @@ -3874,6 +3886,11 @@ !(prop_info[i].prop_type & PROP_WRITE_ONLY) && (ldap_data->bl->priv->evolutionPersonSupported || !(prop_info[i].prop_type & PROP_EVOLVE)) && + (!(prop_info[i].prop_type & (PROP_WITH_EVOSCHEME | PROP_WITHOUT_EVOSCHEME)) || + ((prop_info[i].prop_type & PROP_WITHOUT_EVOSCHEME) != 0 && + !ldap_data->bl->priv->evolutionPersonSupported) || + ((prop_info[i].prop_type & PROP_WITH_EVOSCHEME) != 0 && + ldap_data->bl->priv->evolutionPersonSupported)) && (ldap_data->bl->priv->calEntrySupported || !(prop_info[i].prop_type & PROP_CALENTRY))) { g_string_append_c (big_query, '('); @@ -4073,6 +4090,11 @@ if (!(prop_info[i].prop_type & PROP_WRITE_ONLY) && (ldap_data->bl->priv->evolutionPersonSupported || !(prop_info[i].prop_type & PROP_EVOLVE)) && + (!(prop_info[i].prop_type & (PROP_WITH_EVOSCHEME | PROP_WITHOUT_EVOSCHEME)) || + ((prop_info[i].prop_type & PROP_WITHOUT_EVOSCHEME) != 0 && + !ldap_data->bl->priv->evolutionPersonSupported) || + ((prop_info[i].prop_type & PROP_WITH_EVOSCHEME) != 0 && + ldap_data->bl->priv->evolutionPersonSupported)) && (ldap_data->bl->priv->calEntrySupported || !(prop_info[i].prop_type & PROP_CALENTRY))) { g_string_append_c (big_query, '('); @@ -4192,6 +4214,11 @@ if (!strcmp (query_prop, e_contact_field_name (prop_info[i].field_id))) { if ((evolution_person_supported || !(prop_info[i].prop_type & PROP_EVOLVE)) && + (!(prop_info[i].prop_type & (PROP_WITH_EVOSCHEME | PROP_WITHOUT_EVOSCHEME)) || + ((prop_info[i].prop_type & PROP_WITHOUT_EVOSCHEME) != 0 && + !evolution_person_supported) || + ((prop_info[i].prop_type & PROP_WITH_EVOSCHEME) != 0 && + evolution_person_supported)) && (calentry_supported || !(prop_info[i].prop_type & PROP_CALENTRY))) { return prop_info[i].ldap_attr; @@ -4268,7 +4295,12 @@ } else { for (i = 0; i < G_N_ELEMENTS (prop_info); i++) { - if (!g_ascii_strcasecmp (attr, prop_info[i].ldap_attr)) { + if (!g_ascii_strcasecmp (attr, prop_info[i].ldap_attr) && + (!(prop_info[i].prop_type & (PROP_WITH_EVOSCHEME | PROP_WITHOUT_EVOSCHEME)) || + ((prop_info[i].prop_type & PROP_WITHOUT_EVOSCHEME) != 0 && + !bl->priv->evolutionPersonSupported) || + ((prop_info[i].prop_type & PROP_WITH_EVOSCHEME) != 0 && + bl->priv->evolutionPersonSupported))) { info = &prop_info[i]; break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/src/calendar/libecal/e-cal-recur.c new/evolution-data-server-3.44.3/src/calendar/libecal/e-cal-recur.c --- old/evolution-data-server-3.44.2/src/calendar/libecal/e-cal-recur.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/src/calendar/libecal/e-cal-recur.c 2022-07-01 11:18:42.000000000 +0200 @@ -529,11 +529,6 @@ if (rrule_until && !i_cal_time_is_null_time (rrule_until) && i_cal_time_is_date (rrule_until) && !i_cal_time_is_date (dtstart)) { i_cal_time_adjust (rrule_until, 1, 0, 0, 0); - i_cal_time_set_is_date (rrule_until, FALSE); - i_cal_time_set_time (rrule_until, 0, 0, 0); - - if (!i_cal_time_get_timezone (rrule_until) && !i_cal_time_is_utc (rrule_until)) - i_cal_time_set_timezone (rrule_until, dtstart_zone); } if (rrule_until && !i_cal_time_is_null_time (rrule_until)) @@ -676,11 +671,6 @@ if (exrule_until && !i_cal_time_is_null_time (exrule_until) && i_cal_time_is_date (exrule_until) && !i_cal_time_is_date (dtstart)) { i_cal_time_adjust (exrule_until, 1, 0, 0, 0); - i_cal_time_set_is_date (exrule_until, FALSE); - i_cal_time_set_time (exrule_until, 0, 0, 0); - - if (!i_cal_time_get_timezone (exrule_until) && !i_cal_time_is_utc (exrule_until)) - i_cal_time_set_timezone (exrule_until, dtstart_zone); } if (exrule_until && !i_cal_time_is_null_time (exrule_until)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/src/camel/camel-mime-utils.c new/evolution-data-server-3.44.3/src/camel/camel-mime-utils.c --- old/evolution-data-server-3.44.2/src/camel/camel-mime-utils.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/src/camel/camel-mime-utils.c 2022-07-01 11:18:42.000000000 +0200 @@ -2706,7 +2706,7 @@ w (g_warning ("Invalid address spec: %s", *in)); } } - if (*inptr == '@') { + while (*inptr == '@') { inptr++; g_string_append_c (addr, '@'); word = header_decode_domain (&inptr); @@ -2716,8 +2716,6 @@ } else { w (g_warning ("Invalid address, missing domain: %s", *in)); } - } else { - w (g_warning ("Invalid addr-spec, missing @: %s", *in)); } } else { w (g_warning ("invalid addr-spec, no local part")); @@ -3216,7 +3214,9 @@ } static void -header_references_decode_single (const gchar **in, GSList **list) +header_references_decode_single (const gchar **in, + gboolean *had_valid_value, + GSList **list) { const gchar *inptr = *in; GString *accum_word = NULL; @@ -3227,30 +3227,33 @@ if (*inptr == '<') { id = header_msgid_decode_internal (&inptr); if (id) { + *had_valid_value = TRUE; *list = g_slist_prepend (*list, id); break; } } else { word = header_decode_word (&inptr); if (word) { - /* To support broken clients, which do not enclose message IDs into angle brackets, as - required in the RFC 2822: https://tools.ietf.org/html/rfc2822#section-3.6.4 */ - if (!*inptr || camel_mime_is_lwsp (*inptr)) { - if (accum_word) { - g_string_append (accum_word, word); - *list = g_slist_prepend (*list, g_string_free (accum_word, FALSE)); - accum_word = NULL; + if (!*had_valid_value) { + /* To support broken clients, which do not enclose message IDs into angle brackets, as + required in the RFC 2822: https://tools.ietf.org/html/rfc2822#section-3.6.4 */ + if (!*inptr || camel_mime_is_lwsp (*inptr)) { + if (accum_word) { + g_string_append (accum_word, word); + *list = g_slist_prepend (*list, g_string_free (accum_word, FALSE)); + accum_word = NULL; + } else { + *list = g_slist_prepend (*list, word); + word = NULL; + } } else { - *list = g_slist_prepend (*list, word); - word = NULL; - } - } else { - if (accum_word) - g_string_append (accum_word, word); - else - accum_word = g_string_new (word); + if (accum_word) + g_string_append (accum_word, word); + else + accum_word = g_string_new (word); - g_string_append_c (accum_word, *inptr); + g_string_append_c (accum_word, *inptr); + } } g_free (word); } else if (*inptr != '\0') @@ -3276,12 +3279,13 @@ camel_header_references_decode (const gchar *in) { GSList *refs = NULL; + gboolean had_valid_value = FALSE; if (in == NULL || in[0] == '\0') return NULL; while (*in) - header_references_decode_single (&in, &refs); + header_references_decode_single (&in, &had_valid_value, &refs); return refs; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/src/camel/tests/misc/test1.c new/evolution-data-server-3.44.3/src/camel/tests/misc/test1.c --- old/evolution-data-server-3.44.2/src/camel/tests/misc/test1.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/src/camel/tests/misc/test1.c 2022-07-01 11:18:42.000000000 +0200 @@ -36,6 +36,11 @@ { "t...@camel.host", "test.groupwise@bug.novell", "t...@camel.host" } }, { " << test.groupwise@bug.novell>@novell> <t...@camel.host> <<test.groupwise@bug.novell>@novell>", { "test.groupwise@bug.novell", "t...@camel.host", "test.groupwise@bug.novell" } }, + { "<test@camel@host>", { "test@camel@host" } }, /* broken clients with multiple '@' */ + { "t...@camel.host", { "t...@camel.host" } }, /* broken clients without <> */ + { "test@camel@host", { "test@camel@host" } }, /* broken clients without <> */ + { "<test@camel> <test.1.2.3@camel.1.2.3@host.3.2.1> <t.e.s.t@c.a.m.e.l>", /* mix of good and broken values */ + { "t.e.s.t@c.a.m.e.l", "test.1.2.3@camel.1.2.3@host.3.2.1", "test@camel" } }, }; gint @@ -55,7 +60,9 @@ list = camel_header_references_decode (test1[i].header); for (j = 0; test1[i].values[j]; j++) { check_msg (list != NULL, "didn't find all references"); - check (strcmp (test1[i].values[j], list->data) == 0); + check_msg (string_equal (test1[i].values[j], list->data), + "returned ID '%s' doesn't match expected '%s'", + (const gchar *) list->data, test1[i].values[j]); list = g_slist_next (list); } check_msg (list == NULL, "found more references than should have"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/src/libedataserver/e-source.c new/evolution-data-server-3.44.3/src/libedataserver/e-source.c --- old/evolution-data-server-3.44.2/src/libedataserver/e-source.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/src/libedataserver/e-source.c 2022-07-01 11:18:42.000000000 +0200 @@ -1042,6 +1042,20 @@ return FALSE; } +static void source_connect_dbus_source (ESource *source); + +static void +e_source_dbus_object_notify_source_cb (GObject *dbus_object, + GParamSpec *param, + gpointer user_data) +{ + ESource *source = user_data; + + g_return_if_fail (E_IS_SOURCE (source)); + + source_connect_dbus_source (source); +} + static void source_set_dbus_object (ESource *source, EDBusObject *dbus_object) @@ -1053,7 +1067,10 @@ g_return_if_fail (E_DBUS_IS_OBJECT (dbus_object)); g_return_if_fail (source->priv->dbus_object == NULL); - source->priv->dbus_object = g_object_ref (dbus_object); + source->priv->dbus_object = G_DBUS_OBJECT (g_object_ref (dbus_object)); + + g_signal_connect_object (source->priv->dbus_object, "notify::source", + G_CALLBACK (e_source_dbus_object_notify_source_cb), source, 0); } static void @@ -1231,14 +1248,13 @@ dbus_source = e_dbus_object_get_source (dbus_object); if (dbus_source != NULL) { - g_signal_handlers_disconnect_matched ( - dbus_source, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, object); + g_signal_handlers_disconnect_by_data (dbus_source, object); g_object_unref (dbus_source); } - g_object_unref (priv->dbus_object); - priv->dbus_object = NULL; + g_signal_handlers_disconnect_by_data (priv->dbus_object, object); + + g_clear_object (&priv->dbus_object); } g_mutex_unlock (&priv->property_lock); @@ -2014,6 +2030,11 @@ dbus_source = e_dbus_object_get_source (dbus_object); g_return_if_fail (E_DBUS_IS_SOURCE (dbus_source)); + g_signal_handlers_disconnect_by_func (dbus_source, source_notify_dbus_data_cb, source); + g_signal_handlers_disconnect_by_func (dbus_source, source_notify_dbus_connection_status_cb, source); + g_signal_handlers_disconnect_by_func (dbus_source, source_dbus_credentials_required_cb, source); + g_signal_handlers_disconnect_by_func (dbus_source, source_dbus_authenticate_cb, source); + g_signal_connect_object ( dbus_source, "notify::data", G_CALLBACK (source_notify_dbus_data_cb), source, 0); @@ -2504,14 +2525,21 @@ dbus_source = e_dbus_object_get_source (E_DBUS_OBJECT (source->priv->dbus_object)); if (dbus_source) { - g_signal_handlers_disconnect_by_data (dbus_source, source), + g_signal_handlers_disconnect_by_data (dbus_source, source); g_object_unref (dbus_source); } + + g_signal_handlers_disconnect_by_func (source->priv->dbus_object, e_source_dbus_object_notify_source_cb, source); } g_clear_object (&source->priv->dbus_object); source->priv->dbus_object = dbus_object; + if (source->priv->dbus_object) { + g_signal_connect_object (source->priv->dbus_object, "notify::source", + G_CALLBACK (e_source_dbus_object_notify_source_cb), source, 0); + } + g_mutex_unlock (&source->priv->property_lock); source_connect_dbus_source (source); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/src/libedataserverui/e-credentials-prompter-impl-oauth2.c new/evolution-data-server-3.44.3/src/libedataserverui/e-credentials-prompter-impl-oauth2.c --- old/evolution-data-server-3.44.2/src/libedataserverui/e-credentials-prompter-impl-oauth2.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/src/libedataserverui/e-credentials-prompter-impl-oauth2.c 2022-07-01 11:18:42.000000000 +0200 @@ -561,6 +561,24 @@ g_free (display_name); } +static gchar * +credentials_prompter_impl_oauth2_sanitize_host (gchar *host) +{ + if (!host || !*host) + return host; + + if (*host == '[' && strchr (host, ':')) { + gint len = strlen (host); + + if (len > 2 && host[len - 1] == ']') { + memmove (host, host + 1, len - 2); + host[len - 2] = '\0'; + } + } + + return host; +} + static void credentials_prompter_impl_oauth2_set_proxy (WebKitWebContext *web_context, ESourceRegistry *registry, @@ -604,7 +622,7 @@ case E_PROXY_METHOD_MANUAL: ignore_hosts = e_source_proxy_dup_ignore_hosts (proxy); - tmp = e_source_proxy_dup_socks_host (proxy); + tmp = credentials_prompter_impl_oauth2_sanitize_host (e_source_proxy_dup_socks_host (proxy)); if (tmp && *tmp) { suri = soup_uri_new (NULL); soup_uri_set_scheme (suri, "socks"); @@ -623,7 +641,7 @@ } g_free (tmp); - tmp = e_source_proxy_dup_http_host (proxy); + tmp = credentials_prompter_impl_oauth2_sanitize_host (e_source_proxy_dup_http_host (proxy)); if (tmp && *tmp) { suri = soup_uri_new (NULL); soup_uri_set_scheme (suri, SOUP_URI_SCHEME_HTTP); @@ -650,7 +668,7 @@ } g_free (tmp); - tmp = e_source_proxy_dup_https_host (proxy); + tmp = credentials_prompter_impl_oauth2_sanitize_host (e_source_proxy_dup_https_host (proxy)); if (tmp && *tmp) { suri = soup_uri_new (NULL); soup_uri_set_scheme (suri, SOUP_URI_SCHEME_HTTP); @@ -856,6 +874,7 @@ "enable-page-cache", FALSE, "enable-plugins", FALSE, "media-playback-allows-inline", FALSE, + "hardware-acceleration-policy", WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER, NULL); web_context = webkit_web_context_new (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/tests/libecal/test-cal-recur.c new/evolution-data-server-3.44.3/tests/libecal/test-cal-recur.c --- old/evolution-data-server-3.44.2/tests/libecal/test-cal-recur.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/tests/libecal/test-cal-recur.c 2022-07-01 11:18:42.000000000 +0200 @@ -363,6 +363,151 @@ } } +static ICalComponent * +create_component_midnight (const gchar *tz_location) +{ + const gchar *comp_str = + "BEGIN:VEVENT\r\n" + "SUMMARY:recurs\r\n" + "UID:recurs-id\r\n" + "DTSTART%s:20190107T000000%s\r\n" + "DTEND%s:20190107T003000%s\r\n" + "DTSTAMP:20190101T050000Z\r\n" + "CREATED:20190101T050000Z\r\n" + "LAST-MODIFIED:20190101T050000Z\r\n" + "RRULE:FREQ=DAILY;UNTIL=20190109\r\n" + "END:VEVENT\r\n"; + gchar *tzref = NULL, tzsuffix[2] = { 0, 0 }; + gchar *str; + ICalComponent *icomp; + ICalTimezone *zone = NULL; + ICalTime *itt; + + if (tz_location) { + if (g_ascii_strcasecmp (tz_location, "UTC") == 0) { + tzsuffix[0] = 'Z'; + zone = i_cal_timezone_get_utc_timezone (); + } else { + const gchar *tzid; + + zone = i_cal_timezone_get_builtin_timezone (tz_location); + g_assert_nonnull (zone); + + tzid = i_cal_timezone_get_tzid (zone); + g_assert_nonnull (tzid); + + tzref = g_strconcat (";TZID=", tzid, NULL); + } + } + + str = g_strdup_printf (comp_str, tzref ? tzref : "", tzsuffix, tzref ? tzref : "", tzsuffix); + icomp = i_cal_component_new_from_string (str); + g_assert_nonnull (icomp); + + g_free (tzref); + g_free (str); + + itt = i_cal_component_get_dtstart (icomp); + g_assert_nonnull (itt); + g_assert_true (i_cal_time_get_timezone (itt) == zone); + g_object_unref (itt); + + itt = i_cal_component_get_dtend (icomp); + g_assert_nonnull (itt); + g_assert_true (i_cal_time_get_timezone (itt) == zone); + g_object_unref (itt); + + return icomp; +} + +static void +setup_cal_midnight (ECalClient *cal_client, + const gchar *tz_location) +{ + ICalComponent *icomp; + gboolean success; + gchar *uid = NULL; + GError *error = NULL; + + icomp = create_component_midnight (tz_location); + + if (!e_cal_client_remove_object_sync (cal_client, i_cal_component_get_uid (icomp), NULL, E_CAL_OBJ_MOD_ALL, E_CAL_OPERATION_FLAG_NONE, NULL, &error)) { + g_assert_error (error, E_CAL_CLIENT_ERROR, E_CAL_CLIENT_ERROR_OBJECT_NOT_FOUND); + g_clear_error (&error); + } else { + g_assert_no_error (error); + } + + success = e_cal_client_create_object_sync (cal_client, icomp, E_CAL_OPERATION_FLAG_NONE, &uid, NULL, &error); + g_assert_no_error (error); + g_assert_true (success); + g_assert_nonnull (uid); + + g_object_unref (icomp); + g_free (uid); +} + +static gboolean +recur_instance_midnight_cb (ICalComponent *icomp, + ICalTime *instance_start, + ICalTime *instance_end, + gpointer user_data, + GCancellable *cancellable, + GError **error) +{ + GSList **listp = user_data; + + *listp = g_slist_append (*listp, i_cal_time_as_ical_string (instance_start)); + + return TRUE; +} + +static void +test_recur_midnight_for_zone (ECalClient *client, + const gchar *tz_location) +{ + ICalTime *start, *end; + GSList *list = NULL, *last; + + setup_cal_midnight (client, tz_location); + + start = i_cal_time_new_from_string ("20190101T000000Z"); + end = i_cal_time_new_from_string ("20190131T000000Z"); + + e_cal_client_generate_instances_sync (client, + i_cal_time_as_timet (start), + i_cal_time_as_timet (end), + NULL, /* GCancellable * */ + recur_instance_midnight_cb, &list); + + last = g_slist_last (list); + g_assert_nonnull (last); + if (g_ascii_strcasecmp (tz_location, "UTC") == 0) + g_assert_cmpstr (last->data, ==, "20190109T000000Z"); + else + g_assert_cmpstr (last->data, ==, "20190109T000000"); + g_assert_cmpint (g_slist_length (list), ==, 3); + + g_slist_free_full (list, g_free); + g_clear_object (&start); + g_clear_object (&end); +} + +static void +test_recur_midnight (ETestServerFixture *fixture, + gconstpointer user_data) +{ + ECalClient *client; + + client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient); + + e_cal_client_set_default_timezone (client, i_cal_timezone_get_builtin_timezone ("UTC")); + + test_recur_midnight_for_zone (client, "UTC"); + test_recur_midnight_for_zone (client, "America/New_York"); + test_recur_midnight_for_zone (client, "Europe/Berlin"); +} + static void test_recur_client (ETestServerFixture *fixture, gconstpointer user_data) @@ -623,6 +768,13 @@ e_test_server_utils_setup, test_recur_duration, e_test_server_utils_teardown); + g_test_add ( + "/ECalRecur/Midnight", + ETestServerFixture, + &test_closure, + e_test_server_utils_setup, + test_recur_midnight, + e_test_server_utils_teardown); return e_test_server_utils_run (argc, argv); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/tests/libedata-book/test-book-cache-cursor-change-locale.c new/evolution-data-server-3.44.3/tests/libedata-book/test-book-cache-cursor-change-locale.c --- old/evolution-data-server-3.44.2/tests/libedata-book/test-book-cache-cursor-change-locale.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/tests/libedata-book/test-book-cache-cursor-change-locale.c 2022-07-01 11:18:42.000000000 +0200 @@ -69,7 +69,7 @@ tcu_step_test_add_assertion (data, 5, 17, 16, 18, 10, 14); tcu_step_test_add_assertion (data, 5, 12, 13, 9, 19, 20); - tcu_step_test_change_locale (data, "fr_CA.UTF-8", 0); + tcu_step_test_change_locale (data, "fr_CA.UTF-8", -1); tcu_step_test_add_assertion (data, 5, 11, 1, 2, 5, 6); tcu_step_test_add_assertion (data, 5, 4, 3, 7, 8, 15); tcu_step_test_add_assertion (data, 5, 17, 16, 18, 10, 14); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/evolution-data-server-3.44.2/tests/libedata-book/test-sqlite-cursor-change-locale.c new/evolution-data-server-3.44.3/tests/libedata-book/test-sqlite-cursor-change-locale.c --- old/evolution-data-server-3.44.2/tests/libedata-book/test-sqlite-cursor-change-locale.c 2022-05-27 07:43:00.000000000 +0200 +++ new/evolution-data-server-3.44.3/tests/libedata-book/test-sqlite-cursor-change-locale.c 2022-07-01 11:18:42.000000000 +0200 @@ -72,7 +72,7 @@ step_test_add_assertion (data, 5, 17, 16, 18, 10, 14); step_test_add_assertion (data, 5, 12, 13, 9, 19, 20); - step_test_change_locale (data, "fr_CA.UTF-8", 0); + step_test_change_locale (data, "fr_CA.UTF-8", -1); step_test_add_assertion (data, 5, 11, 1, 2, 5, 6); step_test_add_assertion (data, 5, 4, 3, 7, 8, 15); step_test_add_assertion (data, 5, 17, 16, 18, 10, 14);