From 5daa3e5e599faae335d2298b68c1503d9bbfa6b2 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Tue, 4 Oct 2016 00:22:15 +0000 Subject: [PATCH] bgpd: Fix off-by-one in `clear [ip] bgp...` Signed-off-by: Quentin Young --- bgpd/bgp_vty.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 4f04a97347..7dc8774835 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -6064,19 +6064,23 @@ DEFUN (clear_ip_bgp_all, /* afi safi */ idx_afi = idx_clr_sort + 1; idx_safi = idx_clr_sort + 2; - bgp_get_argv_afi_safi (argc, argv, idx_afi, idx_safi, &afi, &safi, &idx_soft_in_out); - - /* soft, soft in, or soft out */ - if (strmatch(argv[idx_soft_in_out]->text, "in")) - clr_type = BGP_CLEAR_SOFT_IN; - else if (strmatch(argv[idx_soft_in_out]->text, "out")) - clr_type = BGP_CLEAR_SOFT_OUT; - else if (strmatch(argv[idx_soft_in_out]->text, "soft")) - clr_type = BGP_CLEAR_SOFT_BOTH; - else if (strmatch(argv[idx_soft_in_out]->text, "prefix-filter")) - clr_type = BGP_CLEAR_SOFT_IN_ORF_PREFIX; - else - clr_type = BGP_CLEAR_SOFT_NONE; + idx_soft_in_out = 0; + if (argc > idx_afi) + bgp_get_argv_afi_safi (argc, argv, idx_afi, idx_safi, &afi, &safi, &idx_soft_in_out); + + clr_type = BGP_CLEAR_SOFT_NONE; + if (idx_soft_in_out && argc > idx_soft_in_out) + { + /* soft, soft in, or soft out */ + if (strmatch(argv[idx_soft_in_out]->text, "in")) + clr_type = BGP_CLEAR_SOFT_IN; + else if (strmatch(argv[idx_soft_in_out]->text, "out")) + clr_type = BGP_CLEAR_SOFT_OUT; + else if (strmatch(argv[idx_soft_in_out]->text, "soft")) + clr_type = BGP_CLEAR_SOFT_BOTH; + else if (strmatch(argv[idx_soft_in_out]->text, "prefix-filter")) + clr_type = BGP_CLEAR_SOFT_IN_ORF_PREFIX; + } return bgp_clear_vty (vty, vrf, afi, safi, clr_sort, clr_type, clr_arg); } -- 2.39.5