]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
color: Fix another ip segfault when using --color switch
authorPetr Vorel <petr.vorel@gmail.com>
Fri, 13 Oct 2017 13:57:17 +0000 (15:57 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 16 Oct 2017 16:24:11 +0000 (09:24 -0700)
Commit 959f1428 ("color: add new COLOR_NONE and disable_color function")
introducing color enum COLOR_NONE, which is not only duplicite of
COLOR_CLEAR, but also caused segfault, when running ip with --color
switch, as 'attr + 8' in color_fprintf() access array item out of
bounds. Thus removing it and restoring "magic" offset + 7.

Reproduce with:
$ ip -c a

Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
include/color.h
lib/color.c

index 1cd6f7d2ceaf203f3c86552b3791dcdd96f9eea2..c183ef7904ad9844302732b4b2ddfe89f4820b98 100644 (file)
@@ -2,7 +2,6 @@
 #define __COLOR_H__ 1
 
 enum color_attr {
-       COLOR_NONE,
        COLOR_IFNAME,
        COLOR_MAC,
        COLOR_INET,
index 79d5e289d47acb87d37b40ebb0ba6f742045cf84..05afcb219b13b3d2286fdfae06b8d7f28042c60a 100644 (file)
@@ -104,13 +104,13 @@ int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...)
 
        va_start(args, fmt);
 
-       if (!color_is_enabled || attr == COLOR_NONE) {
+       if (!color_is_enabled || attr == COLOR_CLEAR) {
                ret = vfprintf(fp, fmt, args);
                goto end;
        }
 
        ret += fprintf(fp, "%s",
-                      color_codes[attr_colors[is_dark_bg ? attr + 8 : attr]]);
+                      color_codes[attr_colors[is_dark_bg ? attr + 7 : attr]]);
        ret += vfprintf(fp, fmt, args);
        ret += fprintf(fp, "%s", color_codes[C_CLEAR]);