diff options
| author | Jean-Samuel Aubry-Guzzi <js.aubry@shopify.com> | 2025-10-29 08:31:26 -0400 |
|---|---|---|
| committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2025-12-26 11:00:51 +0900 |
| commit | 4b7bbd43408f230997e216a557d586edd492172d (patch) | |
| tree | 78dba8dd87b70350e1ade532b0873b27a33da999 /test | |
| parent | 74becf1b61272c66e835c446525920eae0b8574a (diff) | |
[ruby/resolv] Fix TCP Requester #recv_reply
https://github.com/ruby/resolv/commit/96dc3d15fe
Diffstat (limited to 'test')
| -rw-r--r-- | test/resolv/test_dns.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb index d5d2648e1b..1dda9bc627 100644 --- a/test/resolv/test_dns.rb +++ b/test/resolv/test_dns.rb @@ -822,4 +822,63 @@ class TestResolvDNS < Test::Unit::TestCase end end end + + def test_tcp_connection_closed_before_length + with_tcp('127.0.0.1', 0) do |t| + _, server_port, _, server_address = t.addr + + server_thread = Thread.new do + ct = t.accept + ct.recv(512) + ct.close + end + + client_thread = Thread.new do + requester = Resolv::DNS::Requester::TCP.new(server_address, server_port) + begin + msg = Resolv::DNS::Message.new + msg.add_question('example.org', Resolv::DNS::Resource::IN::A) + sender = requester.sender(msg, msg) + assert_raise(Resolv::ResolvTimeout) do + requester.request(sender, 2) + end + ensure + requester.close + end + end + + server_thread.join + client_thread.join + end + end + + def test_tcp_connection_closed_after_length + with_tcp('127.0.0.1', 0) do |t| + _, server_port, _, server_address = t.addr + + server_thread = Thread.new do + ct = t.accept + ct.recv(512) + ct.send([100].pack('n'), 0) + ct.close + end + + client_thread = Thread.new do + requester = Resolv::DNS::Requester::TCP.new(server_address, server_port) + begin + msg = Resolv::DNS::Message.new + msg.add_question('example.org', Resolv::DNS::Resource::IN::A) + sender = requester.sender(msg, msg) + assert_raise(Resolv::ResolvTimeout) do + requester.request(sender, 2) + end + ensure + requester.close + end + end + + server_thread.join + client_thread.join + end + end end |
