diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c index c14a1a05ac..8f0ccca742 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c @@ -425,17 +425,21 @@ int main(int argc, char **argv) else bgp_port = tmp_port; break; - case 'e': - multipath_num = atoi(optarg); - if (multipath_num > MULTIPATH_NUM - || multipath_num <= 0) { + case 'e': { + unsigned long int parsed_multipath = + strtoul(optarg, NULL, 10); + if (parsed_multipath == 0 + || parsed_multipath > MULTIPATH_NUM + || parsed_multipath > UINT_MAX) { flog_err( EC_BGP_MULTIPATH, - "Multipath Number specified must be less than %d and greater than 0", + "Multipath Number specified must be less than %u and greater than 0", MULTIPATH_NUM); return 1; } + multipath_num = parsed_multipath; break; + } case 'l': bgp_address = optarg; /* listenon implies -n */ diff --git a/zebra/main.c b/zebra/main.c index 306372ccdb..fb7e926c5c 100644 --- a/zebra/main.c +++ b/zebra/main.c @@ -331,17 +331,21 @@ int main(int argc, char **argv) case 'a': allow_delete = 1; break; - case 'e': - zrouter.multipath_num = atoi(optarg); - if (zrouter.multipath_num > MULTIPATH_NUM - || zrouter.multipath_num <= 0) { + case 'e': { + unsigned long int parsed_multipath = + strtoul(optarg, NULL, 10); + if (parsed_multipath == 0 + || parsed_multipath > MULTIPATH_NUM + || parsed_multipath > UINT32_MAX) { flog_err( EC_ZEBRA_BAD_MULTIPATH_NUM, - "Multipath Number specified must be less than %d and greater than 0", + "Multipath Number specified must be less than %u and greater than 0", MULTIPATH_NUM); return 1; } + zrouter.multipath_num = parsed_multipath; break; + } case 'o': vrf_default_name_configured = optarg; break;