From 359fff600e5793b5170f712643b484fb1313ec43 Mon Sep 17 00:00:00 2001 From: Robert Stepanek Date: Tue, 25 Oct 2022 15:32:17 +0200 Subject: Escape comma in x-property TEXT values 453689b7678cbc588c2811efb953d513fc8dc90f changed libical to not escape comma in x-property values. While this is a sane choice for x-property values of unknown kind, it is wrong if the value type of the property is TEXT. --- src/libical/icalvalue.c | 3 ++- src/test/regression.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/libical/icalvalue.c b/src/libical/icalvalue.c index c18fad02..01212ae3 100644 --- a/src/libical/icalvalue.c +++ b/src/libical/icalvalue.c @@ -307,7 +307,8 @@ static char *icalmemory_strdup_and_quote(const icalvalue *value, const char *unq if ((icalproperty_isa(value->parent) == ICAL_CATEGORIES_PROPERTY) || (icalproperty_isa(value->parent) == ICAL_RESOURCES_PROPERTY) || (icalproperty_isa(value->parent) == ICAL_POLLPROPERTIES_PROPERTY) || - (icalproperty_isa(value->parent) == ICAL_X_PROPERTY)) { + ((icalproperty_isa(value->parent) == ICAL_X_PROPERTY) && + icalvalue_isa(value) != ICAL_TEXT_VALUE)) { icalmemory_append_char(&str, &str_p, &buf_sz, *p); break; } diff --git a/src/test/regression.c b/src/test/regression.c index 1e5a0acb..36a49961 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4921,6 +4921,7 @@ test_icalvalue_resets_timezone_on_set(void) static void test_comma_in_xproperty(void) { + // X-property value without explicit value type icalproperty *xproperty = icalproperty_new_from_string("X-TEST-PROPERTY:test,test"); icalcomponent *c; @@ -4935,6 +4936,21 @@ static void test_comma_in_xproperty(void) str_is("icalproperty_as_ical_string()", "X-TEST-PROPERTY:test,test\r\n", icalproperty_as_ical_string(icalcomponent_get_first_property(icalcomponent_get_inner(c), ICAL_X_PROPERTY))); icalcomponent_free(c); + + // X-property value with TEXT value type + xproperty = icalproperty_new_from_string("X-TEST-PROPERTY;VALUE=TEXT:test\\,test"); + + c = icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + xproperty, + 0), + 0); + + str_is("icalproperty_as_ical_string()", "X-TEST-PROPERTY;VALUE=TEXT:test\\,test\r\n", icalproperty_as_ical_string(icalcomponent_get_first_property(icalcomponent_get_inner(c), ICAL_X_PROPERTY))); + + icalcomponent_free(c); } static void test_remove_tzid_from_due(void) -- cgit v1.2.1