diff -up quagga-0.99.9/ripngd/ripng_main.c.port_overflow quagga-0.99.9/ripngd/ripng_main.c --- quagga-0.99.9/ripngd/ripng_main.c.port_overflow 2006-10-16 01:34:48.000000000 +0200 +++ quagga-0.99.9/ripngd/ripng_main.c 2008-01-29 17:39:58.000000000 +0100 @@ -240,7 +240,8 @@ main (int argc, char **argv) break; } vty_port = atoi (optarg); - vty_port = (vty_port ? vty_port : RIPNG_VTY_PORT); + if (vty_port <= 0 || vty_port > 0xffff) + vty_port = RIPNG_VTY_PORT; break; case 'r': retain_mode = 1; diff -up quagga-0.99.9/bgpd/bgp_main.c.port_overflow quagga-0.99.9/bgpd/bgp_main.c --- quagga-0.99.9/bgpd/bgp_main.c.port_overflow 2006-10-16 01:34:47.000000000 +0200 +++ quagga-0.99.9/bgpd/bgp_main.c 2008-01-29 17:58:31.000000000 +0100 @@ -201,6 +201,7 @@ main (int argc, char **argv) int dryrun = 0; char *progname; struct thread thread; + int tmp_port; /* Set umask before anything for security */ umask (0027); @@ -236,7 +237,11 @@ main (int argc, char **argv) pid_file = optarg; break; case 'p': - bm->port = atoi (optarg); + tmp_port = atoi (optarg); + if (tmp_port <= 0 || tmp_port > 0xffff) + bm->port = BGP_PORT_DEFAULT; + else + bm->port = tmp_port; break; case 'A': vty_addr = optarg; @@ -250,7 +255,8 @@ main (int argc, char **argv) break; } vty_port = atoi (optarg); - vty_port = (vty_port ? vty_port : BGP_VTY_PORT); + if (vty_port <= 0 || vty_port > 0xffff) + vty_port = BGP_VTY_PORT; break; case 'r': retain_mode = 1; diff -up quagga-0.99.9/ripd/rip_main.c.port_overflow quagga-0.99.9/ripd/rip_main.c --- quagga-0.99.9/ripd/rip_main.c.port_overflow 2006-10-16 01:34:48.000000000 +0200 +++ quagga-0.99.9/ripd/rip_main.c 2008-01-29 17:39:58.000000000 +0100 @@ -236,7 +236,8 @@ main (int argc, char **argv) break; } vty_port = atoi (optarg); - vty_port = (vty_port ? vty_port : RIP_VTY_PORT); + if (vty_port <= 0 || vty_port > 0xffff) + vty_port = RIP_VTY_PORT; break; case 'r': retain_mode = 1; diff -up quagga-0.99.9/ospfd/ospf_main.c.port_overflow quagga-0.99.9/ospfd/ospf_main.c --- quagga-0.99.9/ospfd/ospf_main.c.port_overflow 2006-10-16 01:34:48.000000000 +0200 +++ quagga-0.99.9/ospfd/ospf_main.c 2008-01-29 17:39:58.000000000 +0100 @@ -245,7 +245,8 @@ main (int argc, char **argv) break; } vty_port = atoi (optarg); - vty_port = (vty_port ? vty_port : OSPF_VTY_PORT); + if (vty_port <= 0 || vty_port > 0xffff) + vty_port = OSPF_VTY_PORT; break; case 'u': ospfd_privs.user = optarg; diff -up quagga-0.99.9/ospf6d/ospf6_main.c.port_overflow quagga-0.99.9/ospf6d/ospf6_main.c --- quagga-0.99.9/ospf6d/ospf6_main.c.port_overflow 2006-10-16 01:34:48.000000000 +0200 +++ quagga-0.99.9/ospf6d/ospf6_main.c 2008-01-29 17:39:58.000000000 +0100 @@ -227,7 +227,8 @@ main (int argc, char *argv[], char *envp break; } vty_port = atoi (optarg); - vty_port = (vty_port ? vty_port : OSPF6_VTY_PORT); + if (vty_port <= 0 || vty_port > 0xffff) + vty_port = OSPF6_VTY_PORT; break; case 'u': ospf6d_privs.user = optarg; diff -up quagga-0.99.9/zebra/main.c.port_overflow quagga-0.99.9/zebra/main.c --- quagga-0.99.9/zebra/main.c.port_overflow 2007-05-02 17:28:33.000000000 +0200 +++ quagga-0.99.9/zebra/main.c 2008-01-29 17:39:58.000000000 +0100 @@ -276,7 +276,8 @@ main (int argc, char **argv) break; } vty_port = atoi (optarg); - vty_port = (vty_port ? vty_port : ZEBRA_VTY_PORT); + if (vty_port <= 0 || vty_port > 0xffff) + vty_port = ZEBRA_VTY_PORT; break; case 'r': retain_mode = 1;