Skip to content

Commit 6d8b985

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_1_9_3@44949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 7662211 commit 6d8b985

3 files changed

Lines changed: 19 additions & 5 deletions

File tree

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Fri Feb 14 15:56:27 2014 Tanaka Akira <akr@fsij.org>
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
Fri Feb 14 15:54:57 2014 Tanaka Akira <akr@fsij.org>
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
@@ -500,8 +500,9 @@ def each_resource(name, typeclass, &proc)
500500
msg.rd = 1
501501
msg.add_question(candidate, typeclass)
502502
unless sender = senders[[candidate, nameserver, port]]
503-
sender = senders[[candidate, nameserver, port]] =
504-
requester.sender(msg, candidate, nameserver, port)
503+
sender = requester.sender(msg, candidate, nameserver, port)
504+
next if !sender
505+
senders[[candidate, nameserver, port]] = sender
505506
end
506507
reply, reply_name = requester.request(sender, tout)
507508
case reply.rcode
@@ -707,7 +708,11 @@ def initialize(*nameserver_port)
707708
af = Socket::AF_INET
708709
end
709710
next if @socks_hash[bind_host]
710-
sock = UDPSocket.new(af)
711+
begin
712+
sock = UDPSocket.new(af)
713+
rescue Errno::EAFNOSUPPORT
714+
next # The kernel doesn't support the address family.
715+
end
711716
sock.do_not_reverse_lookup = true
712717
sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD
713718
DNS.bind_random_port(sock, bind_host)
@@ -722,11 +727,12 @@ def recv_reply(readable_socks)
722727
end
723728

724729
def sender(msg, data, host, port=Port)
730+
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
731+
return nil if !sock
725732
service = [host, port]
726733
id = DNS.allocate_request_id(host, port)
727734
request = msg.encode
728735
request[0,2] = [id].pack('n')
729-
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
730736
return @senders[[service, id]] =
731737
Sender.new(request, data, sock, host, port)
732738
end
@@ -747,6 +753,7 @@ def initialize(msg, data, sock, host, port)
747753
attr_reader :data
748754

749755
def send
756+
raise "@sock is nil." if @sock.nil?
750757
@sock.send(@msg, 0, @host, @port)
751758
end
752759
end
@@ -790,6 +797,7 @@ def close
790797

791798
class Sender < Requester::Sender # :nodoc:
792799
def send
800+
raise "@sock is nil." if @sock.nil?
793801
@sock.send(@msg, 0)
794802
end
795803
attr_reader :data

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#define RUBY_VERSION "1.9.3"
2-
#define RUBY_PATCHLEVEL 529
2+
#define RUBY_PATCHLEVEL 530
33

44
#define RUBY_RELEASE_DATE "2014-02-14"
55
#define RUBY_RELEASE_YEAR 2014

0 commit comments

Comments
 (0)