fix invalid header handle #10

This commit is contained in:
Max Lv
2013-06-25 17:50:41 +08:00
parent 87c130c9e2
commit 16ad10b101
+6 -8
View File
@@ -252,12 +252,10 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
} else if (atyp == 3) {
// Domain name
uint8_t name_len = *(uint8_t *)(server->buf + offset);
if (name_len >= 255) {
close_and_free_server(EV_A_ server);
return;
if (name_len < r && name_len < 255 && name_len > 0) {
memcpy(host, server->buf + offset + 1, name_len);
offset += name_len + 1;
}
memcpy(host, server->buf + offset + 1, name_len);
offset += name_len + 1;
} else if (atyp == 4) {
// IP V6
size_t in6_addr_len = sizeof(struct in6_addr);
@@ -268,8 +266,8 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
}
}
if (offset == 0) {
LOGE("invalid header with length %zu", r);
if (offset == 1) {
LOGE("invalid header with addr type %d", atyp);
close_and_free_server(EV_A_ server);
return;
}
@@ -280,7 +278,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
sprintf(port, "%d", p);
if (verbose) {
LOGD("connect to: %s:%s", host, port);
LOGD("connect to: %s:%s in atyp %d", host, port, atyp);
}
struct addrinfo hints;