1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/resolv] Fix confusion of received response message

This is a follow up for commit 33fb966197f1 ("Remove sender/message_id
pair after response received in resolv", 2020-09-11).

As the @senders instance variable is also used for tracking transaction
ID allocation, simply removing an entry without releasing the ID would
eventually deplete the ID space and cause
Resolv::DNS.allocate_request_id to hang.

It seems the intention of the code was to check that the received DNS
message is actually the response for the question made within the method
earlier. Let's have it actually do so.

[Bug #12838] https://bugs.ruby-lang.org/issues/12838
[Bug #17748] https://bugs.ruby-lang.org/issues/17748

https://github.com/ruby/resolv/commit/53ca9c9209
This commit is contained in:
Kazuki Yamaguchi 2021-03-26 18:16:07 +09:00 committed by Tanaka Akira
parent 5b0abba931
commit 9edc162583

View file

@ -696,17 +696,17 @@ class Resolv
rescue DecodeError
next # broken DNS message ignored
end
if s = sender_for(from, msg)
if sender == sender_for(from, msg)
break
else
# unexpected DNS message ignored
end
end
return msg, s.data
return msg, sender.data
end
def sender_for(addr, msg)
@senders.delete([addr,msg.id])
@senders[[addr,msg.id]]
end
def close