summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJean-Samuel Aubry-Guzzi <js.aubry@shopify.com>2025-12-08 11:22:55 -0500
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2025-12-26 11:00:51 +0900
commitf8d0960af260219ab7c10a797ac62ecad25b2974 (patch)
treeaf8bea18029cd03435db15f3d7281b8f12251c68 /lib
parent4b7bbd43408f230997e216a557d586edd492172d (diff)
[ruby/resolv] Handle TCP Requester #recv_reply incomplete data
https://github.com/ruby/resolv/commit/9c640bdc4a
Diffstat (limited to 'lib')
-rw-r--r--lib/resolv.rb7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/resolv.rb b/lib/resolv.rb
index e6153af2a9..fa7d4e2e47 100644
--- a/lib/resolv.rb
+++ b/lib/resolv.rb
@@ -721,7 +721,8 @@ class Resolv
begin
reply, from = recv_reply(select_result[0])
rescue Errno::ECONNREFUSED, # GNU/Linux, FreeBSD
- Errno::ECONNRESET # Windows
+ Errno::ECONNRESET, # Windows
+ EOFError
# No name server running on the server?
# Don't wait anymore.
raise ResolvTimeout
@@ -931,10 +932,10 @@ class Resolv
def recv_reply(readable_socks)
len_data = readable_socks[0].read(2)
- raise Errno::ECONNRESET if len_data.nil?
+ raise EOFError if len_data.nil? || len_data.bytesize != 2
len = len_data.unpack('n')[0]
reply = @socks[0].read(len)
- raise Errno::ECONNRESET if reply.nil?
+ raise EOFError if reply.nil? || reply.bytesize != len
return reply, nil
end