Loading src/or/proto_socks.c +12 −3 Original line number Original line Diff line number Diff line Loading @@ -340,13 +340,16 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, tor_addr_to_str(tmpbuf, &destaddr, sizeof(tmpbuf), 1); tor_addr_to_str(tmpbuf, &destaddr, sizeof(tmpbuf), 1); if (strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN) { if (BUG(strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN)) { /* LCOV_EXCL_START -- This branch is unreachable, given the * size of tmpbuf and the actual value of MAX_SOCKS_ADDR_LEN */ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); log_warn(LD_APP, log_warn(LD_APP, "socks5 IP takes %d bytes, which doesn't fit in %d. " "socks5 IP takes %d bytes, which doesn't fit in %d. " "Rejecting.", "Rejecting.", (int)strlen(tmpbuf)+1,(int)MAX_SOCKS_ADDR_LEN); (int)strlen(tmpbuf)+1,(int)MAX_SOCKS_ADDR_LEN); return -1; return -1; /* LCOV_EXCL_STOP */ } } strlcpy(req->address,tmpbuf,sizeof(req->address)); strlcpy(req->address,tmpbuf,sizeof(req->address)); req->port = ntohs(get_uint16(data+4+addrlen)); req->port = ntohs(get_uint16(data+4+addrlen)); Loading Loading @@ -375,12 +378,15 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, *want_length_out = 7+len; *want_length_out = 7+len; return 0; /* not yet */ return 0; /* not yet */ } } if (len+1 > MAX_SOCKS_ADDR_LEN) { if (BUG(len+1 > MAX_SOCKS_ADDR_LEN)) { /* LCOV_EXCL_START -- unreachable, since len is at most 255, * and MAX_SOCKS_ADDR_LEN is 256. */ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); log_warn(LD_APP, log_warn(LD_APP, "socks5 hostname is %d bytes, which doesn't fit in " "socks5 hostname is %d bytes, which doesn't fit in " "%d. Rejecting.", len+1,MAX_SOCKS_ADDR_LEN); "%d. Rejecting.", len+1,MAX_SOCKS_ADDR_LEN); return -1; return -1; /* LCOV_EXCL_STOP */ } } memcpy(req->address,data+5,len); memcpy(req->address,data+5,len); req->address[len] = 0; req->address[len] = 0; Loading Loading @@ -443,10 +449,13 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, log_debug(LD_APP,"socks4: destip not in form 0.0.0.x."); log_debug(LD_APP,"socks4: destip not in form 0.0.0.x."); in.s_addr = htonl(destip); in.s_addr = htonl(destip); tor_inet_ntoa(&in,tmpbuf,sizeof(tmpbuf)); tor_inet_ntoa(&in,tmpbuf,sizeof(tmpbuf)); if (strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN) { if (BUG(strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN)) { /* LCOV_EXCL_START -- This branch is unreachable, given the * size of tmpbuf and the actual value of MAX_SOCKS_ADDR_LEN */ log_debug(LD_APP,"socks4 addr (%d bytes) too long. Rejecting.", log_debug(LD_APP,"socks4 addr (%d bytes) too long. Rejecting.", (int)strlen(tmpbuf)); (int)strlen(tmpbuf)); return -1; return -1; /* LCOV_EXCL_STOP */ } } log_debug(LD_APP, log_debug(LD_APP, "socks4: successfully read destip (%s)", "socks4: successfully read destip (%s)", Loading Loading
src/or/proto_socks.c +12 −3 Original line number Original line Diff line number Diff line Loading @@ -340,13 +340,16 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, tor_addr_to_str(tmpbuf, &destaddr, sizeof(tmpbuf), 1); tor_addr_to_str(tmpbuf, &destaddr, sizeof(tmpbuf), 1); if (strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN) { if (BUG(strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN)) { /* LCOV_EXCL_START -- This branch is unreachable, given the * size of tmpbuf and the actual value of MAX_SOCKS_ADDR_LEN */ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); log_warn(LD_APP, log_warn(LD_APP, "socks5 IP takes %d bytes, which doesn't fit in %d. " "socks5 IP takes %d bytes, which doesn't fit in %d. " "Rejecting.", "Rejecting.", (int)strlen(tmpbuf)+1,(int)MAX_SOCKS_ADDR_LEN); (int)strlen(tmpbuf)+1,(int)MAX_SOCKS_ADDR_LEN); return -1; return -1; /* LCOV_EXCL_STOP */ } } strlcpy(req->address,tmpbuf,sizeof(req->address)); strlcpy(req->address,tmpbuf,sizeof(req->address)); req->port = ntohs(get_uint16(data+4+addrlen)); req->port = ntohs(get_uint16(data+4+addrlen)); Loading Loading @@ -375,12 +378,15 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, *want_length_out = 7+len; *want_length_out = 7+len; return 0; /* not yet */ return 0; /* not yet */ } } if (len+1 > MAX_SOCKS_ADDR_LEN) { if (BUG(len+1 > MAX_SOCKS_ADDR_LEN)) { /* LCOV_EXCL_START -- unreachable, since len is at most 255, * and MAX_SOCKS_ADDR_LEN is 256. */ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR); log_warn(LD_APP, log_warn(LD_APP, "socks5 hostname is %d bytes, which doesn't fit in " "socks5 hostname is %d bytes, which doesn't fit in " "%d. Rejecting.", len+1,MAX_SOCKS_ADDR_LEN); "%d. Rejecting.", len+1,MAX_SOCKS_ADDR_LEN); return -1; return -1; /* LCOV_EXCL_STOP */ } } memcpy(req->address,data+5,len); memcpy(req->address,data+5,len); req->address[len] = 0; req->address[len] = 0; Loading Loading @@ -443,10 +449,13 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, log_debug(LD_APP,"socks4: destip not in form 0.0.0.x."); log_debug(LD_APP,"socks4: destip not in form 0.0.0.x."); in.s_addr = htonl(destip); in.s_addr = htonl(destip); tor_inet_ntoa(&in,tmpbuf,sizeof(tmpbuf)); tor_inet_ntoa(&in,tmpbuf,sizeof(tmpbuf)); if (strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN) { if (BUG(strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN)) { /* LCOV_EXCL_START -- This branch is unreachable, given the * size of tmpbuf and the actual value of MAX_SOCKS_ADDR_LEN */ log_debug(LD_APP,"socks4 addr (%d bytes) too long. Rejecting.", log_debug(LD_APP,"socks4 addr (%d bytes) too long. Rejecting.", (int)strlen(tmpbuf)); (int)strlen(tmpbuf)); return -1; return -1; /* LCOV_EXCL_STOP */ } } log_debug(LD_APP, log_debug(LD_APP, "socks4: successfully read destip (%s)", "socks4: successfully read destip (%s)", Loading