From f06d8b69a95ec84b5a50fd705a7588b1fe3c2527 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 16 May 2019 14:20:32 +0200 Subject: cal: make sure months_in_row makes sense [coverity scan] * avoid divide by zero in mountly() dues to wrong months_in_row * make sure months_in_row is at least 1 Signed-off-by: Karel Zak --- misc-utils/cal.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'misc-utils') diff --git a/misc-utils/cal.c b/misc-utils/cal.c index c7e8d9511..1d4d24134 100644 --- a/misc-utils/cal.c +++ b/misc-utils/cal.c @@ -580,13 +580,19 @@ int main(int argc, char **argv) ctl.months_in_row = MONTHS_IN_YEAR_ROW; /* default */ if (isatty(STDOUT_FILENO)) { - int w = get_terminal_width(STDOUT_FILENO); - int mw = ctl.julian ? DOY_MONTH_WIDTH : DOM_MONTH_WIDTH; - int extra = ((w / mw) - 1) * ctl.gutter_width; - int new_n = (w - extra) / mw; + int w, mw, extra, new_n; + + w = get_terminal_width(80); + mw = ctl.julian ? DOY_MONTH_WIDTH : DOM_MONTH_WIDTH; + + if (w < mw) + w = mw; + + extra = ((w / mw) - 1) * ctl.gutter_width; + new_n = (w - extra) / mw; if (new_n < MONTHS_IN_YEAR_ROW) - ctl.months_in_row = new_n; + ctl.months_in_row = new_n > 0 ? new_n : 1; } } else if (!ctl.months_in_row) ctl.months_in_row = 1; -- cgit v1.2.3-55-g7522