diff options
author | Sami Kerola | 2014-11-22 00:33:33 +0100 |
---|---|---|
committer | Sami Kerola | 2014-12-19 10:10:48 +0100 |
commit | 26f3a38673b3f78c89eb7f5c4454b107f0af1b48 (patch) | |
tree | 378fc8d2eb119f470dc058e3b5a652aea99ffee0 /misc-utils/cal.c | |
parent | lib/mbalign: fix unsigned integer overflow [AddressSanitizer] (diff) | |
download | kernel-qcow2-util-linux-26f3a38673b3f78c89eb7f5c4454b107f0af1b48.tar.gz kernel-qcow2-util-linux-26f3a38673b3f78c89eb7f5c4454b107f0af1b48.tar.xz kernel-qcow2-util-linux-26f3a38673b3f78c89eb7f5c4454b107f0af1b48.zip |
cal: fix signed integer overflow [AddressSanitizer]
misc-utils/cal.c:811:16: runtime error: signed integer overflow:
2147483645 + 536870911 cannot be represented in type 'int'
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'misc-utils/cal.c')
-rw-r--r-- | misc-utils/cal.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/misc-utils/cal.c b/misc-utils/cal.c index a11136a5b..593ab28a9 100644 --- a/misc-utils/cal.c +++ b/misc-utils/cal.c @@ -807,9 +807,11 @@ static int day_in_week(int day, int month, int32_t year) year -= (month < 3) + 14; if (REFORMATION_YEAR < year || (year == REFORMATION_YEAR && 9 < month) - || (year == REFORMATION_YEAR && month == 9 && 13 < day)) - return (year + (year / 4) - (year / 100) + (year / 400) + reform[month - 1] + + || (year == REFORMATION_YEAR && month == 9 && 13 < day)) { + long long_year = year; + return (long_year + (year / 4) - (year / 100) + (year / 400) + reform[month - 1] + day) % 7; + } if (year < REFORMATION_YEAR || (year == REFORMATION_YEAR && month < 9) || (year == REFORMATION_YEAR && month == 9 && day < 3)) |