Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libical for openSUSE:Factory checked in at 2022-04-02 18:20:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libical (Old) and /work/SRC/openSUSE:Factory/.libical.new.1900 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libical" Sat Apr 2 18:20:28 2022 rev:56 rq:965669 version:3.0.14 Changes: -------- --- /work/SRC/openSUSE:Factory/libical/libical.changes 2022-01-29 21:01:32.862889584 +0100 +++ /work/SRC/openSUSE:Factory/.libical.new.1900/libical.changes 2022-04-02 18:20:39.678193776 +0200 @@ -1,0 +2,7 @@ +Sun Mar 20 21:21:57 UTC 2022 - Dirk M??ller <dmuel...@suse.com> + +- update to 3.0.14: + * icalvalue: Reset non-UTC icaltimetype::zone on set + * Fix icalcomponent_set_due not removing TZID when necessary + +------------------------------------------------------------------- Old: ---- libical-3.0.13.tar.gz New: ---- libical-3.0.14.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libical.spec ++++++ --- /var/tmp/diff_new_pack.CWsgDr/_old 2022-04-02 18:20:40.298186817 +0200 +++ /var/tmp/diff_new_pack.CWsgDr/_new 2022-04-02 18:20:40.306186728 +0200 @@ -26,7 +26,7 @@ %bcond_with glib %endif Name: libical%{name_ext} -Version: 3.0.13 +Version: 3.0.14 Release: 0 URL: https://github.com/libical/libical Source: %{url}/releases/download/v%{version}/libical-%{version}.tar.gz ++++++ libical-3.0.13.tar.gz -> libical-3.0.14.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libical-3.0.13/CMakeLists.txt new/libical-3.0.14/CMakeLists.txt --- old/libical-3.0.13/CMakeLists.txt 2022-01-17 16:19:56.000000000 +0100 +++ new/libical-3.0.14/CMakeLists.txt 2022-02-05 15:02:47.000000000 +0100 @@ -112,7 +112,7 @@ set(LIBICAL_LIB_MAJOR_VERSION "3") set(LIBICAL_LIB_MINOR_VERSION "0") -set(LIBICAL_LIB_PATCH_VERSION "13") +set(LIBICAL_LIB_PATCH_VERSION "14") set(LIBICAL_LIB_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libical-3.0.13/ReleaseNotes.txt new/libical-3.0.14/ReleaseNotes.txt --- old/libical-3.0.13/ReleaseNotes.txt 2022-01-17 16:19:56.000000000 +0100 +++ new/libical-3.0.14/ReleaseNotes.txt 2022-02-05 15:02:47.000000000 +0100 @@ -1,6 +1,11 @@ Release Highlights ================== +Version 3.0.14 (05 February 2022): +---------------------------------- + * icalvalue: Reset non-UTC icaltimetype::zone on set + * Fix icalcomponent_set_due not removing TZID when necessary + Version 3.0.13 (17 January 2022): --------------------------------- * icalcomponent_get_dtend() return icaltime_null_time(), unless called on VEVENT, VAVAILABILITY or VFREEBUSY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libical-3.0.13/src/libical/icalcomponent.c new/libical-3.0.14/src/libical/icalcomponent.c --- old/libical-3.0.13/src/libical/icalcomponent.c 2022-01-17 16:19:56.000000000 +0100 +++ new/libical-3.0.14/src/libical/icalcomponent.c 2022-02-05 15:02:47.000000000 +0100 @@ -2382,6 +2382,7 @@ icalcomponent_add_property(inner, due_prop); } else if (due_prop != 0) { icalproperty_set_due(due_prop, v); + icalproperty_remove_parameter_by_kind(due_prop, ICAL_TZID_PARAMETER); } else if (dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libical-3.0.13/src/libical/icalderivedvalue.c.in new/libical-3.0.14/src/libical/icalderivedvalue.c.in --- old/libical-3.0.13/src/libical/icalderivedvalue.c.in 2022-01-17 16:19:56.000000000 +0100 +++ new/libical-3.0.14/src/libical/icalderivedvalue.c.in 2022-02-05 15:02:47.000000000 +0100 @@ -28,6 +28,7 @@ #include "icalvalueimpl.h" #include "icalerror.h" #include "icalmemory.h" +#include "icaltimezone.h" #include <errno.h> #include <stdlib.h> @@ -299,6 +300,12 @@ impl = (struct icalvalue_impl *)value; impl->data.v_time = v; + /* preserve only built-in UTC time zone, otherwise unset any set on the 'v' */ + if (impl->data.v_time.zone != NULL && + impl->data.v_time.zone != icaltimezone_get_utc_timezone()) { + impl->data.v_time.zone = NULL; + } + icalvalue_reset_kind(impl); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libical-3.0.13/src/test/regression.c new/libical-3.0.14/src/test/regression.c --- old/libical-3.0.13/src/test/regression.c 2022-01-17 16:19:56.000000000 +0100 +++ new/libical-3.0.14/src/test/regression.c 2022-02-05 15:02:47.000000000 +0100 @@ -4832,6 +4832,119 @@ icalcomponent_free(c); } +static void +test_icalvalue_resets_timezone_on_set(void) +{ + const char *strcomp = + "BEGIN:VCALENDAR\r\n" + "BEGIN:VTIMEZONE\r\n" + "TZID:my_zone\r\n" + "BEGIN:STANDARD\r\n" + "TZNAME:my_zone\r\n" + "DTSTART:19160429T230000\r\n" + "TZOFFSETFROM:+0100\r\n" + "TZOFFSETTO:+0200\r\n" + "RRULE:FREQ=YEARLY;UNTIL=19160430T220000Z;BYDAY=-1SU;BYMONTH=4\r\n" + "END:STANDARD\r\n" + "END:VTIMEZONE\r\n" + "BEGIN:VEVENT\r\n" + "UID:0\r\n" + "DTSTART;TZID=my_zone:20180101T010000\r\n" + "DTEND:20180202T020000Z\r\n" + "DUE:20180302T030000\r\n" + "END:VEVENT\r\n" + "END:VCALENDAR\r\n"; + icalcomponent *comp, *clone, *inner; + icaltimetype comp_dtstart, comp_dtend, comp_due; + icaltimetype clone_dtstart, clone_dtend, clone_due; + const char *orig_str, *clone_str; + int estate; + + estate = icalerror_get_errors_are_fatal(); + icalerror_set_errors_are_fatal(0); + + /* First try without calling 'set' */ + comp = icalcomponent_new_from_string(strcomp); + ok("1st - vCalendar can be parsed", (comp != NULL)); + inner = icalcomponent_get_inner(comp); + ok("1st - inner exists", (inner != NULL)); + orig_str = icalcomponent_as_ical_string(inner); + comp_dtstart = icalcomponent_get_dtstart(inner); + comp_dtend = icalcomponent_get_dtend(inner); + comp_due = icalcomponent_get_due(inner); + ok("1st - comp dtstart is non-UTC zone", (comp_dtstart.zone != NULL && comp_dtstart.zone != icaltimezone_get_utc_timezone())); + ok("1st - comp dtend is UTC zone", (comp_dtend.zone == icaltimezone_get_utc_timezone())); + ok("1st - comp due is floating", (comp_due.zone == NULL)); + clone = icalcomponent_new_clone(inner); + icalcomponent_free(comp); + /* note the comp_dtstart.zone points to a freed memory now (it was freed with the 'comp') */ + clone_dtstart = icalcomponent_get_dtstart(clone); + clone_dtend = icalcomponent_get_dtend(clone); + clone_due = icalcomponent_get_due(clone); + ok("1st - clone dtstart is null zone", (clone_dtstart.zone == NULL)); + ok("1st - clone dtend is UTC zone", (clone_dtend.zone == icaltimezone_get_utc_timezone())); + ok("1st - clone due is floating", (clone_due.zone == NULL)); + clone_str = icalcomponent_as_ical_string(clone); + ok("1st - clone and orig components match", (strcmp(orig_str, clone_str) == 0)); + icalcomponent_free(clone); + + /* Second try with calling 'set' */ + comp = icalcomponent_new_from_string(strcomp); + inner = icalcomponent_get_inner(comp); + orig_str = icalcomponent_as_ical_string(inner); + comp_dtstart = icalcomponent_get_dtstart(inner); + comp_dtend = icalcomponent_get_dtend(inner); + comp_due = icalcomponent_get_due(inner); + ok("2nd - comp dtstart is non-UTC zone", (comp_dtstart.zone != NULL && comp_dtstart.zone != icaltimezone_get_utc_timezone())); + ok("2nd - comp dtend is UTC zone", (comp_dtend.zone == icaltimezone_get_utc_timezone())); + ok("2nd - comp due is floating", (comp_due.zone == NULL)); + icalcomponent_set_dtstart(inner, comp_dtstart); + icalcomponent_set_dtend(inner, comp_dtend); + icalcomponent_set_due(inner, comp_due); + comp_dtstart = icalcomponent_get_dtstart(inner); + comp_dtend = icalcomponent_get_dtend(inner); + comp_due = icalcomponent_get_due(inner); + ok("2nd - comp dtstart is non-UTC zone", (comp_dtstart.zone != NULL && comp_dtstart.zone != icaltimezone_get_utc_timezone())); + ok("2nd - comp dtend is UTC zone after set", (comp_dtend.zone == icaltimezone_get_utc_timezone())); + ok("2nd - comp due is floating after set", (comp_due.zone == NULL)); + clone = icalcomponent_new_clone(inner); + icalcomponent_free(comp); + /* note the comp_dtstart.zone points to a freed memory now (it was freed with the 'comp') */ + clone_dtstart = icalcomponent_get_dtstart(clone); + clone_dtend = icalcomponent_get_dtend(clone); + clone_due = icalcomponent_get_due(clone); + ok("2nd - clone dtstart is null zone", (clone_dtstart.zone == NULL)); + ok("2nd - clone dtend is UTC zone", (clone_dtend.zone == icaltimezone_get_utc_timezone())); + ok("2nd - clone due is floating", (clone_due.zone == NULL)); + clone_str = icalcomponent_as_ical_string(clone); + ok("2nd - clone and orig components match", (strcmp(orig_str, clone_str) == 0)); + icalcomponent_free(clone); + + icalerror_set_errors_are_fatal(estate); + icalerror_clear_errno(); +} + +static void test_remove_tzid_from_due(void) +{ + icalproperty *due = icalproperty_vanew_due(icaltime_from_string("20220120T120000"), 0); + icalcomponent *c; + + icalproperty_add_parameter(due, icalparameter_new_tzid("America/New_York")); + + c = icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VTODO_COMPONENT, + due, + 0), + 0); + + icalcomponent_set_due(c, icaltime_from_string("20220120")); + str_is("icalproperty_as_ical_string()", "DUE;VALUE=DATE:20220120\r\n", icalproperty_as_ical_string(icalcomponent_get_first_property(icalcomponent_get_inner(c), ICAL_DUE_PROPERTY))); + + icalcomponent_free(c); +} + int main(int argc, char *argv[]) { #if !defined(HAVE_UNISTD_H) @@ -4972,6 +5085,8 @@ test_run("Test builtin compat TZID", test_builtin_compat_tzid, do_test, do_header); test_run("Test VCC vCard parse", test_vcc_vcard_parse, do_test, do_header); test_run("Test implicit DTEND and DURATION for VEVENT and VTODO", test_implicit_dtend_duration, do_test, do_header); + test_run("Test icalvalue resets timezone on set", test_icalvalue_resets_timezone_on_set, do_test, do_header); + test_run("Test removing TZID from DUE with icalcomponent_set_due", test_remove_tzid_from_due, do_test, do_header); /** OPTIONAL TESTS go here... **/