Add default: cases in some switches to detect if shit goes very badly
wrong. Right now these code paths are unreachable since the callers of
these functions never use a value that is not covered in the switch() but
gcc is not smart enough for that.

-- 
:wq Claudio

Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/parse.y,v
retrieving revision 1.453
diff -u -p -r1.453 parse.y
--- parse.y     26 Apr 2023 18:14:28 -0000      1.453
+++ parse.y     28 Apr 2023 13:07:35 -0000
@@ -5683,6 +5683,9 @@ push_prefix(struct bgpd_addr *addr, uint
                complen = PREFIX_SIZE(len) + 1;
                data = &addr->v6;
                break;
+       default:
+               yyerror("unsupported address family for flowspec address");
+               return -1;
        }
        comp = malloc(complen);
        if (comp == NULL) {
Index: printconf.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/printconf.c,v
retrieving revision 1.166
diff -u -p -r1.166 printconf.c
--- printconf.c 21 Apr 2023 10:48:33 -0000      1.166
+++ printconf.c 28 Apr 2023 13:10:49 -0000
@@ -542,12 +542,6 @@ print_flowspec_flags(struct flowspec *f,
        const char *fmt, *flags;
        int complen, off = 0;
 
-       if (flowspec_get_component(f->data, f->len, type, is_v6,
-           &comp, &complen) != 1)
-               return;
-
-       printf("%s ", flowspec_fmt_label(type));
-
        switch (type) {
        case FLOWSPEC_TYPE_TCP_FLAGS:
                flags = FLOWSPEC_TCP_FLAG_STRING;
@@ -558,7 +552,16 @@ print_flowspec_flags(struct flowspec *f,
                else
                        flags = FLOWSPEC_FRAG_STRING6;
                break;
+       default:
+               printf("??? ");
+               return;
        }
+
+       if (flowspec_get_component(f->data, f->len, type, is_v6,
+           &comp, &complen) != 1)
+               return;
+
+       printf("%s ", flowspec_fmt_label(type));
 
        fmt = flowspec_fmt_bin_op(comp, complen, &off, flags);
        if (off == -1) {

Reply via email to