New support functions for input validation.
check_sec(), overflow_add(), overflow_mul() Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
parent
16d30327ba
commit
c45da5f5ca
@ -1159,6 +1159,7 @@ char *new_tempfile(const char *);
|
|||||||
int check_date(unsigned, unsigned, unsigned);
|
int check_date(unsigned, unsigned, unsigned);
|
||||||
int parse_date(const char *, enum datefmt, int *, int *, int *, struct date *);
|
int parse_date(const char *, enum datefmt, int *, int *, int *, struct date *);
|
||||||
int parse_date_interactive(const char *, int *, int *, int *);
|
int parse_date_interactive(const char *, int *, int *, int *);
|
||||||
|
int check_sec(time_t *);
|
||||||
int check_time(unsigned, unsigned);
|
int check_time(unsigned, unsigned);
|
||||||
int parse_time(const char *, unsigned *, unsigned *);
|
int parse_time(const char *, unsigned *, unsigned *);
|
||||||
int parse_duration(const char *, unsigned *);
|
int parse_duration(const char *, unsigned *);
|
||||||
@ -1181,6 +1182,8 @@ int starts_with(const char *, const char *);
|
|||||||
int starts_with_ci(const char *, const char *);
|
int starts_with_ci(const char *, const char *);
|
||||||
int hash_matches(const char *, const char *);
|
int hash_matches(const char *, const char *);
|
||||||
int show_dialogs(void);
|
int show_dialogs(void);
|
||||||
|
int overflow_add(int, int, int *);
|
||||||
|
int overflow_mul(int, int, int *);
|
||||||
|
|
||||||
/* vars.c */
|
/* vars.c */
|
||||||
extern int col, row;
|
extern int col, row;
|
||||||
|
36
src/utils.c
36
src/utils.c
@ -788,6 +788,16 @@ int check_date(unsigned year, unsigned month, unsigned day)
|
|||||||
day <= days[month - 1] + (month == 2 && ISLEAP(year)) ? 1 : 0);
|
day <= days[month - 1] + (month == 2 && ISLEAP(year)) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check that a time in seconds is a valid calcurse date (ignoring hour:min:sec).
|
||||||
|
*/
|
||||||
|
int check_sec(time_t *time)
|
||||||
|
{
|
||||||
|
struct tm tm;
|
||||||
|
localtime_r(time, &tm);
|
||||||
|
return check_date(tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert a string containing a date into three integers containing the year,
|
* Convert a string containing a date into three integers containing the year,
|
||||||
* month and day.
|
* month and day.
|
||||||
@ -1870,3 +1880,29 @@ int show_dialogs(void)
|
|||||||
{
|
{
|
||||||
return (!quiet) && conf.system_dialogs;
|
return (!quiet) && conf.system_dialogs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Overflow check for addition with positive second term.
|
||||||
|
*/
|
||||||
|
int overflow_add(int x, int y, int *z)
|
||||||
|
{
|
||||||
|
if (y < 0)
|
||||||
|
return 1;
|
||||||
|
if (INT_MAX - y < x)
|
||||||
|
return 1;
|
||||||
|
*z = x + y;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Overflow check for multiplication with positive terms.
|
||||||
|
*/
|
||||||
|
int overflow_mul(int x, int y, int *z)
|
||||||
|
{
|
||||||
|
if (x < 0 || y <= 0)
|
||||||
|
return 1;
|
||||||
|
if (INT_MAX / y < x)
|
||||||
|
return 1;
|
||||||
|
*z = x * y;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user