diff options
author | Ken Murchison <murch@fastmail.com> | 2019-05-26 10:24:18 -0400 |
---|---|---|
committer | Ken Murchison <murch@fastmail.com> | 2019-05-26 10:24:18 -0400 |
commit | 5eb8e14b2a0f9ecedb08ec84bb0a8d5aa394e1fb (patch) | |
tree | 3a23a14496d0e4b992c73da4e1ad0d1c7d2410a7 | |
parent | afa976ad016f60b41df6957dce55649e88647ee7 (diff) | |
download | libical-git-5eb8e14b2a0f9ecedb08ec84bb0a8d5aa394e1fb.tar.gz |
Don't allow both COUNT and UNTIL in RRULE
-rw-r--r-- | src/libical/icalderivedvalue.c.in | 3 | ||||
-rw-r--r-- | src/libical/icalrecur.c | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/libical/icalderivedvalue.c.in b/src/libical/icalderivedvalue.c.in index a8d4adef..140b267e 100644 --- a/src/libical/icalderivedvalue.c.in +++ b/src/libical/icalderivedvalue.c.in @@ -144,6 +144,9 @@ icalvalue *icalvalue_new_recur(struct icalrecurrencetype v) void icalvalue_set_recur(icalvalue *impl, struct icalrecurrencetype v) { icalerror_check_arg_rv((impl != 0), "value"); + /* don't allow both count and until */ + icalerror_check_arg_rv(v.count == 0 || icaltime_is_null_time(v.until), + "recurrencetype"); icalerror_check_value_type(value, ICAL_RECUR_VALUE); if (impl->data.v_recur != 0) { diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index afacedad..0b3c63c9 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -611,9 +611,13 @@ struct icalrecurrencetype icalrecurrencetype_from_string(const char *str) parser.rt.count = atoi(value); /* don't allow count to be less than 1 */ if (parser.rt.count < 1) r = -1; + /* don't allow both count and until */ + else if (!icaltime_is_null_time(parser.rt.until)) r = -1; } else if (strcasecmp(name, "UNTIL") == 0) { parser.rt.until = icaltime_from_string(value); if (icaltime_is_null_time(parser.rt.until)) r = -1; + /* don't allow both count and until */ + else if (parser.rt.count > 0) r = -1; } else if (strcasecmp(name, "INTERVAL") == 0) { parser.rt.interval = (short)atoi(value); /* don't allow an interval to be less than 1 @@ -720,7 +724,7 @@ char *icalrecurrencetype_as_string_r(struct icalrecurrencetype *recur) char temp[20]; int i, j; - if (recur->freq == ICAL_NO_RECURRENCE) { + if (recur == 0 || recur->freq == ICAL_NO_RECURRENCE) { return 0; } |