]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
cfdisk: avoid use of VLA in combination with sizeof() [smatch scan]
authorSami Kerola <kerolasa@iki.fi>
Sat, 11 Feb 2017 19:01:08 +0000 (19:01 +0000)
committerKarel Zak <kzak@redhat.com>
Mon, 20 Feb 2017 11:58:12 +0000 (12:58 +0100)
disk-utils/cfdisk.c:1066:29: error: cannot size expression

One should use sizeof() only when variable size can be known at time of
compilation.  That is not the case with variable length arrays.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
disk-utils/cfdisk.c

index e4470e9519e2d45237fb23ccc2025551c04c32ed..19b62f24bf01049f01b0619be5bd64609bcf35c3 100644 (file)
@@ -1049,9 +1049,10 @@ static void ui_draw_menuitem(struct cfdisk *cf,
                             struct cfdisk_menuitem *d,
                             size_t idx)
 {
-       char buf[80 * MB_CUR_MAX], *ptr = buf;
+       char *buf, *ptr;
        const char *name;
        size_t width;
+       const size_t buf_sz = 80 * MB_CUR_MAX;
        int ln, cl, vert = cf->menu->vertical;
 
        if (!menuitem_on_page(cf, idx))
@@ -1059,6 +1060,7 @@ static void ui_draw_menuitem(struct cfdisk *cf,
        ln = menuitem_get_line(cf, idx);
        cl = menuitem_get_column(cf, idx);
 
+       ptr = buf = xmalloc(buf_sz);
        /* string width */
        if (vert) {
                width = cf->menu->width + MENU_V_SPADDING;
@@ -1068,7 +1070,7 @@ static void ui_draw_menuitem(struct cfdisk *cf,
                width = MENU_H_SPADDING + cf->menu->width + MENU_H_SPADDING;
 
        name = _(d->name);
-       mbsalign(name, ptr, sizeof(buf), &width,
+       mbsalign(name, ptr, buf_sz, &width,
                        vert ? MBS_ALIGN_LEFT : MBS_ALIGN_CENTER,
                        0);
 
@@ -1087,6 +1089,7 @@ static void ui_draw_menuitem(struct cfdisk *cf,
                mvprintw(ln, cl, "%s", buf);
        else
                mvprintw(ln, cl, "%s%s%s", MENU_H_PRESTR, buf, MENU_H_POSTSTR);
+       free(buf);
 
        if (cf->menu->idx == idx) {
                standend();