Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/resolv.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1654,7 +1654,7 @@ def encode

class MessageEncoder # :nodoc:
def initialize
@data = ''.dup
@data = ''.dup.b
@names = {}
yield self
end
Expand All @@ -1664,7 +1664,7 @@ def to_s
end

def put_bytes(d)
@data << d
@data << d.b
end

def put_pack(template, *d)
Expand All @@ -1689,7 +1689,7 @@ def put_string(d)
raise ArgumentError, "character-string is too long (#{s.bytesize} bytes, max 255): #{s.inspect}"
end
self.put_pack("C", s.bytesize)
@data << s
@data << s.b
end

def put_string_list(ds)
Expand Down
27 changes: 27 additions & 0 deletions test/resolv/test_dns.rb
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,33 @@ def test_no_server
end
end

def test_internationalized_domain_name_query
bug19697 = '[Bug #19697]'
with_udp('127.0.0.1', 0) {|u|
_, server_port, _, server_address = u.addr
client_thread = Thread.new {
Resolv::DNS.open(:nameserver_port => [[server_address, server_port]], :search => [], :ndots => 0) {|dns|
dns.getresources("\uC6B0\uD3B8.\uB2F7\uCEF4", Resolv::DNS::Resource::IN::MX)
}
}
server_thread = Thread.new {
msg, (_, client_port, _, client_address) = Timeout.timeout(5) {u.recvfrom(4096)}
query = Resolv::DNS::Message.decode(msg)
reply = Resolv::DNS::Message.new(query.id)
reply.qr = 1
reply.rd = query.rd
reply.ra = 1
query.each_question {|name, typeclass|
reply.add_question(name, typeclass)
}
u.send(reply.encode, 0, client_address, client_port)
}
resources = client_thread.value
server_thread.join
assert_equal([], resources, bug19697)
}
end

def test_invalid_byte_comment
bug9273 = '[ruby-core:59239] [Bug #9273]'
Tempfile.create('resolv_test_dns_') do |tmpfile|
Expand Down