Index: netcat-openbsd-1.89/netcat.c =================================================================== --- netcat-openbsd-1.89.orig/netcat.c 2008-01-22 16:17:17.000000000 -0500 +++ netcat-openbsd-1.89/netcat.c 2008-01-22 16:17:18.000000000 -0500 @@ -67,7 +67,7 @@ /* Command Line Options */ int dflag; /* detached, no stdin */ -unsigned int iflag; /* Interval Flag */ +int iflag; /* Interval Flag */ int jflag; /* use jumbo frames if we can */ int kflag; /* More than one connect */ int lflag; /* Bind to local port */ @@ -108,13 +108,13 @@ main(int argc, char *argv[]) { int ch, s, ret, socksv; - char *host, *uport; + char *host, *uport, *endp; struct addrinfo hints; struct servent *sv; socklen_t len; struct sockaddr_storage cliaddr; char *proxy; - const char *errstr, *proxyhost = "", *proxyport = NULL; + const char *proxyhost = "", *proxyport = NULL; struct addrinfo proxyhints; ret = 1; @@ -122,6 +122,7 @@ socksv = 5; host = NULL; uport = NULL; + endp = NULL; sv = NULL; while ((ch = getopt(argc, argv, @@ -153,9 +154,9 @@ help(); break; case 'i': - iflag = strtonum(optarg, 0, UINT_MAX, &errstr); - if (errstr) - errx(1, "interval %s: %s", errstr, optarg); + iflag = (int)strtoul(optarg, &endp, 10); + if (iflag < 0 || *endp != '\0') + errx(1, "interval cannot be negative"); break; case 'j': jflag = 1; @@ -191,9 +192,11 @@ vflag = 1; break; case 'w': - timeout = strtonum(optarg, 0, INT_MAX / 1000, &errstr); - if (errstr) - errx(1, "timeout %s: %s", errstr, optarg); + timeout = (int)strtoul(optarg, &endp, 10); + if (timeout < 0 || *endp != '\0') + errx(1, "timeout cannot be negative"); + if (timeout >= (INT_MAX / 1000)) + errx(1, "timeout too large"); timeout *= 1000; break; case 'x': @@ -680,8 +683,7 @@ void build_ports(char *p) { - const char *errstr; - char *n; + char *n, *endp; int hi, lo, cp; int x = 0; @@ -693,12 +695,12 @@ n++; /* Make sure the ports are in order: lowest->highest. */ - hi = strtonum(n, 1, PORT_MAX, &errstr); - if (errstr) - errx(1, "port number %s: %s", errstr, n); - lo = strtonum(p, 1, PORT_MAX, &errstr); - if (errstr) - errx(1, "port number %s: %s", errstr, p); + hi = (int)strtoul(n, &endp, 10); + if (hi <= 0 || hi > PORT_MAX || *endp != '\0') + errx(1, "port range not valid"); + lo = (int)strtoul(p, &endp, 10); + if (lo <= 0 || lo > PORT_MAX || *endp != '\0') + errx(1, "port range not valid"); if (lo > hi) { cp = hi; @@ -729,9 +731,9 @@ } } } else { - hi = strtonum(p, 1, PORT_MAX, &errstr); - if (errstr) - errx(1, "port number %s: %s", errstr, p); + hi = (int)strtoul(p, &endp, 10); + if (hi <= 0 || hi > PORT_MAX || *endp != '\0') + errx(1, "port range not valid"); portlist[0] = calloc(1, PORT_MAX_LEN); if (portlist[0] == NULL) err(1, NULL);