diff options
author | Lars Henriksen <LarsHenriksen@get2net.dk> | 2019-01-16 08:54:57 +0100 |
---|---|---|
committer | Lukas Fleischer <lfleischer@calcurse.org> | 2019-01-18 23:38:33 +0100 |
commit | 870fa1aa327c443979bddfc862a691597b8a2273 (patch) | |
tree | 7052d4612b7e25aea51d1c4d48d134ae8a73444f /src/day.c | |
parent | 03340db72e8c92f84d4a2425a1a5b74ce76f2df4 (diff) | |
download | calcurse-870fa1aa327c443979bddfc862a691597b8a2273.tar.gz calcurse-870fa1aa327c443979bddfc862a691597b8a2273.zip |
Overflow check for 32-bit types only
Included is a check of the 'until' date for pasted recurrent items.
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Diffstat (limited to 'src/day.c')
-rw-r--r-- | src/day.c | 31 |
1 files changed, 29 insertions, 2 deletions
@@ -671,19 +671,46 @@ int day_paste_item(struct day_item *p, time_t date) /* No previously cut item. */ return 0; } + /* + * Valid until date of recurrent items? + * Careful: p->start is not yet set. + */ + time_t until; switch (p->type) { case EVNT: event_paste_item(p->item.ev, date); break; case RECUR_EVNT: - recur_event_paste_item(p->item.rev, date); + /* want: until = shift + old_until */ + if (p->item.rev->rpt->until && + overflow_add( + date - p->item.rev->day, + p->item.rev->rpt->until, + &until) + ) + return 0; + if (check_sec(&until)) + recur_event_paste_item(p->item.rev, date); + else + return 0; break; case APPT: apoint_paste_item(p->item.apt, date); break; case RECUR_APPT: - recur_apoint_paste_item(p->item.rapt, date); + /* wanted: until = shift + old_until */ + if (p->item.rapt->rpt->until && + overflow_add( + date - update_time_in_date(p->item.rapt->start, 0, 0), + p->item.rapt->rpt->until, + &until) + ) + return 0; + if (check_sec(&until)) + recur_apoint_paste_item(p->item.rapt, date); + else + return 0; break; default: EXIT(_("unknown item type")); |