]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
cal: make sure months_in_row makes sense [coverity scan]
authorKarel Zak <kzak@redhat.com>
Thu, 16 May 2019 12:20:32 +0000 (14:20 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 16 May 2019 12:22:43 +0000 (14:22 +0200)
* 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 <kzak@redhat.com>
misc-utils/cal.c

index c7e8d9511ec592f27da61bd981ba88105fd90bbb..1d4d241345659969f1b5df4e377befe5125dd07b 100644 (file)
@@ -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;