summaryrefslogtreecommitdiffstats
path: root/misc-utils/cal.c
diff options
context:
space:
mode:
authorSami Kerola2014-11-22 00:33:33 +0100
committerSami Kerola2014-12-19 10:10:48 +0100
commit26f3a38673b3f78c89eb7f5c4454b107f0af1b48 (patch)
tree378fc8d2eb119f470dc058e3b5a652aea99ffee0 /misc-utils/cal.c
parentlib/mbalign: fix unsigned integer overflow [AddressSanitizer] (diff)
downloadkernel-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.c6
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))