Validate date/time when scanning items
Bail out when reading dates such as "02/30/2013" from the appointments file. These *could* be converted into valid dates but since we never write invalid dates to that file, these indicate a user error. Fixes following test cases: * appointment-009.sh * appointment-012.sh * appointment-016.sh * appointment-019.sh * event-003.sh Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
43bdd12254
commit
9907069f44
@ -165,6 +165,12 @@ struct apoint *apoint_scan(FILE * f, struct tm start, struct tm end, char state,
|
|||||||
char buf[BUFSIZ], *newline;
|
char buf[BUFSIZ], *newline;
|
||||||
time_t tstart, tend;
|
time_t tstart, tend;
|
||||||
|
|
||||||
|
EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) ||
|
||||||
|
!check_date(end.tm_year, end.tm_mon, end.tm_mday) ||
|
||||||
|
!check_time(start.tm_hour, start.tm_min) ||
|
||||||
|
!check_time(end.tm_hour, end.tm_min),
|
||||||
|
_("date error in appointment"));
|
||||||
|
|
||||||
/* Read the appointment description */
|
/* Read the appointment description */
|
||||||
if (!fgets(buf, sizeof buf, f))
|
if (!fgets(buf, sizeof buf, f))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -125,6 +125,10 @@ struct event *event_scan(FILE * f, struct tm start, int id, char *note)
|
|||||||
char buf[BUFSIZ], *nl;
|
char buf[BUFSIZ], *nl;
|
||||||
time_t tstart;
|
time_t tstart;
|
||||||
|
|
||||||
|
EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) ||
|
||||||
|
!check_time(start.tm_hour, start.tm_min),
|
||||||
|
_("date error in event"));
|
||||||
|
|
||||||
/* Read the event description */
|
/* Read the event description */
|
||||||
if (!fgets(buf, sizeof buf, f))
|
if (!fgets(buf, sizeof buf, f))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
19
src/recur.c
19
src/recur.c
@ -325,6 +325,14 @@ struct recur_apoint *recur_apoint_scan(FILE * f, struct tm start, struct tm end,
|
|||||||
char buf[BUFSIZ], *nl;
|
char buf[BUFSIZ], *nl;
|
||||||
time_t tstart, tend, tuntil;
|
time_t tstart, tend, tuntil;
|
||||||
|
|
||||||
|
EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) ||
|
||||||
|
!check_date(end.tm_year, end.tm_mon, end.tm_mday) ||
|
||||||
|
!check_time(start.tm_hour, start.tm_min) ||
|
||||||
|
!check_time(end.tm_hour, end.tm_min) ||
|
||||||
|
(until.tm_year != 0 && !check_date(until.tm_year, until.tm_mon,
|
||||||
|
until.tm_mday)),
|
||||||
|
_("date error in appointment"));
|
||||||
|
|
||||||
/* Read the appointment description */
|
/* Read the appointment description */
|
||||||
if (!fgets(buf, sizeof buf, f))
|
if (!fgets(buf, sizeof buf, f))
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -368,6 +376,12 @@ struct recur_event *recur_event_scan(FILE * f, struct tm start, int id,
|
|||||||
char buf[BUFSIZ], *nl;
|
char buf[BUFSIZ], *nl;
|
||||||
time_t tstart, tuntil;
|
time_t tstart, tuntil;
|
||||||
|
|
||||||
|
EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) ||
|
||||||
|
!check_time(start.tm_hour, start.tm_min) ||
|
||||||
|
(until.tm_year != 0 && !check_date(until.tm_year, until.tm_mon,
|
||||||
|
until.tm_mday)),
|
||||||
|
_("date error in event"));
|
||||||
|
|
||||||
/* Read the event description */
|
/* Read the event description */
|
||||||
if (!fgets(buf, sizeof buf, f))
|
if (!fgets(buf, sizeof buf, f))
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -750,6 +764,11 @@ void recur_exc_scan(llist_t * lexc, FILE * data_file)
|
|||||||
&day.tm_mon, &day.tm_mday, &day.tm_year) != 3) {
|
&day.tm_mon, &day.tm_mday, &day.tm_year) != 3) {
|
||||||
EXIT(_("syntax error in item date"));
|
EXIT(_("syntax error in item date"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXIT_IF(!check_date(day.tm_year, day.tm_mon, day.tm_mday) ||
|
||||||
|
!check_time(day.tm_hour, day.tm_min),
|
||||||
|
_("date error in item exception"));
|
||||||
|
|
||||||
day.tm_hour = 0;
|
day.tm_hour = 0;
|
||||||
day.tm_min = day.tm_sec = 0;
|
day.tm_min = day.tm_sec = 0;
|
||||||
day.tm_isdst = -1;
|
day.tm_isdst = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user