Skip to content

Commit e8c1c96

Browse files
committed
merge revision(s) 44880: [Backport ruby#9477]
* lib/resolv.rb: Ignore name servers which cause EAFNOSUPPORT on socket creation. Reported by Bjoern Rennhak. [ruby-core:60442] [Bug ruby#9477] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45110 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 650f200 commit e8c1c96

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Sat Feb 22 14:18:35 2014 Tanaka Akira <[email protected]>
2+
3+
* lib/resolv.rb: Ignore name servers which cause EAFNOSUPPORT on
4+
socket creation.
5+
Reported by Bjoern Rennhak. [ruby-core:60442] [Bug #9477]
6+
17
Sat Feb 22 14:07:04 2014 Tanaka Akira <[email protected]>
28

39
* lib/resolv.rb (Resolv::DNS::Message::MessageDecoder): Raise

lib/resolv.rb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -522,8 +522,9 @@ def fetch_resource(name, typeclass)
522522
msg.rd = 1
523523
msg.add_question(candidate, typeclass)
524524
unless sender = senders[[candidate, nameserver, port]]
525-
sender = senders[[candidate, nameserver, port]] =
526-
requester.sender(msg, candidate, nameserver, port)
525+
sender = requester.sender(msg, candidate, nameserver, port)
526+
next if !sender
527+
senders[[candidate, nameserver, port]] = sender
527528
end
528529
reply, reply_name = requester.request(sender, tout)
529530
case reply.rcode
@@ -741,7 +742,11 @@ def initialize(*nameserver_port)
741742
af = Socket::AF_INET
742743
end
743744
next if @socks_hash[bind_host]
744-
sock = UDPSocket.new(af)
745+
begin
746+
sock = UDPSocket.new(af)
747+
rescue Errno::EAFNOSUPPORT
748+
next # The kernel doesn't support the address family.
749+
end
745750
sock.do_not_reverse_lookup = true
746751
sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD
747752
DNS.bind_random_port(sock, bind_host)
@@ -756,11 +761,12 @@ def recv_reply(readable_socks)
756761
end
757762

758763
def sender(msg, data, host, port=Port)
764+
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
765+
return nil if !sock
759766
service = [host, port]
760767
id = DNS.allocate_request_id(host, port)
761768
request = msg.encode
762769
request[0,2] = [id].pack('n')
763-
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
764770
return @senders[[service, id]] =
765771
Sender.new(request, data, sock, host, port)
766772
end
@@ -781,6 +787,7 @@ def initialize(msg, data, sock, host, port)
781787
attr_reader :data
782788

783789
def send
790+
raise "@sock is nil." if @sock.nil?
784791
@sock.send(@msg, 0, @host, @port)
785792
end
786793
end
@@ -824,6 +831,7 @@ def close
824831

825832
class Sender < Requester::Sender # :nodoc:
826833
def send
834+
raise "@sock is nil." if @sock.nil?
827835
@sock.send(@msg, 0)
828836
end
829837
attr_reader :data

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define RUBY_VERSION "2.1.1"
22
#define RUBY_RELEASE_DATE "2014-02-22"
3-
#define RUBY_PATCHLEVEL 54
3+
#define RUBY_PATCHLEVEL 55
44

55
#define RUBY_RELEASE_YEAR 2014
66
#define RUBY_RELEASE_MONTH 2

0 commit comments

Comments
 (0)