From 870ed868ffa1ee4a99128186452cbb64459d2ff2 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 14 Jan 2017 02:26:48 +0000 Subject: Made #decode_rdata client to catch errors * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#get_rr): re-raise an exception from decode_rdata as DecodeError, so it can report them to the top in more informative way. It was not reflecting on errors of data and thus breaking. Client code expects `DecodeError` and knows how to handle broken messages. [Fix GH-1511] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57325 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/resolv/test_dns.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'test/resolv') diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb index d1431c1427..f21a094b20 100644 --- a/test/resolv/test_dns.rb +++ b/test/resolv/test_dns.rb @@ -205,6 +205,21 @@ class TestResolvDNS < Test::Unit::TestCase assert_instance_of Resolv::IPv6, Resolv::IPv6.create('::1:127.0.0.1') end + def test_ipv6_should_be_16 + ref = '[rubygems:1626]' + + broken_message = + "\0\0\0\0\0\0\0\0\0\0\0\1" \ + "\x03ns2\bdnsimple\x03com\x00" \ + "\x00\x1C\x00\x01\x00\x02OD" \ + "\x00\x10$\x00\xCB\x00 I\x00\x01\x00\x00\x00\x00" + + e = assert_raise_with_message(Resolv::DNS::DecodeError, /IPv6 address must be 16 bytes/, ref) do + Resolv::DNS::Message.decode broken_message + end + assert_kind_of(ArgumentError, e.cause) + end + def test_too_big_label_address n = 2000 m = Resolv::DNS::Message::MessageEncoder.new {|msg| -- cgit v1.2.3