if (colon) {
_address = tor_strndup(addrport, colon-addrport);
_port = atoi(colon+1);
- if (_port<1 || _port>65536) {
+ if (_port<1 || _port>65535) {
log_fn(LOG_WARN, "Port '%s' out of range", colon+1);
_port = 0;
ok = 0;
log_fn(LOG_WARN, "Unparseable of missing port in hidden service port configuration.");
return NULL;
}
+ if (realport < 1 || realport > 65535) {
+ log_fn(LOG_WARN, "Port out of range");
+ return NULL;
+ }
addr = 0x7F000001u; /* Default to 127.0.0.1 */
}
bits = (int) strtol(mask, &endptr, 10);
if (!*endptr) {
/* strtol handled the whole mask. */
+ if (bits < 0 || bits > 32) {
+ log_fn(LOG_WARN, "Bad number of mask bits on exit policy; rejecting.");
+ goto policy_read_failed;
+ }
newe->msk = ~((1<<(32-bits))-1);
} else if (tor_inet_aton(mask, &in) != 0) {
newe->msk = ntohl(in.s_addr);
} else {
newe->prt_max = newe->prt_min;
}
+ if (newe->prt_min > newe->prt_max) {
+ log_fn(LOG_WARN,"Insane port range on exit policy; rejecting.");
+ goto policy_read_failed;
+ }
}
in.s_addr = htonl(newe->addr);