marc 97/11/14 07:59:18
Modified: src/modules/proxy proxy_util.c Log: Remove strtoul() use from mod_proxy since it can be done a different way and isn't portable. PR: 1214 Reviewed by: Dean Gaudet, Martin Kraemer, Jim Jagielski Revision Changes Path 1.36 +10 -5 apachen/src/modules/proxy/proxy_util.c Index: proxy_util.c =================================================================== RCS file: /export/home/cvs/apachen/src/modules/proxy/proxy_util.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- proxy_util.c 1997/11/01 21:13:24 1.35 +++ proxy_util.c 1997/11/14 15:59:17 1.36 @@ -867,9 +867,9 @@ int proxy_is_ipaddr(struct dirconn_entry *This) { const char *addr = This->name; - unsigned long ip_addr[4]; + long ip_addr[4]; int i, quads; - unsigned long bits; + long bits; /* if the address is given with an explicit netmask, use that */ /* Due to a deficiency in ap_inet_addr(), it is impossible to parse */ @@ -900,11 +900,16 @@ if (!isdigit(*addr)) return 0; /* no digit at start of quad */ - ip_addr[quads] = strtoul(addr, &tmp, 0); + ip_addr[quads] = strtol(addr, &tmp, 0); if (tmp == addr) /* expected a digit, found something else */ return 0; + if (ip_addr[quads] < 0 || ip_addr[quads] > 255) { + /* invalid octet */ + return 0; + } + addr = tmp; if (*addr == '.' && quads != 3) @@ -919,14 +924,14 @@ ++addr; - bits = strtoul(addr, &tmp, 0); + bits = strtol(addr, &tmp, 0); if (tmp == addr) /* expected a digit, found something else */ return 0; addr = tmp; - if (bits > 32) /* netmask must be between 0 and 32 */ + if (bits < 0 || bits > 32) /* netmask must be between 0 and 32 */ return 0; }