diff options
-rw-r--r-- | src/dns.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/dns.cpp b/src/dns.cpp index d295aabf0..e75f98449 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -535,11 +535,12 @@ bool Manager::TCPSocket::Client::ProcessRead() length += i; - short want_len = packet_buffer[0] << 8 | packet_buffer[1]; - if (length >= want_len - 2) + unsigned short want_len = packet_buffer[0] << 8 | packet_buffer[1]; + if (length >= want_len + 2) { - SocketEngine::Change(this, false, SF_READABLE); - return DNS::Engine->HandlePacket(this, packet_buffer + 2, length - 2, NULL); + int len = length - 2; + length -= want_len + 2; + return DNS::Engine->HandlePacket(this, packet_buffer + 2, len, NULL); } return true; } |