diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-01-14 02:26:48 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-01-14 02:26:48 +0000 |
commit | 870ed868ffa1ee4a99128186452cbb64459d2ff2 (patch) | |
tree | 4a868d34871ebc8b83171fb8455099827e0b7ead /lib | |
parent | 7b66154f26e365bc131752bffd80bbbb151a660a (diff) | |
download | ruby-870ed868ffa1ee4a99128186452cbb64459d2ff2.tar.gz |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/resolv.rb | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/resolv.rb b/lib/resolv.rb index a5a997a43d..ebb2a9c411 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -1635,7 +1635,13 @@ class Resolv name = self.get_name type, klass, ttl = self.get_unpack('nnN') typeclass = Resource.get_class(type, klass) - res = self.get_length16 { typeclass.decode_rdata self } + res = self.get_length16 do + begin + typeclass.decode_rdata self + rescue => e + raise DecodeError, e.message, e.backtrace + end + end res.instance_variable_set :@ttl, ttl return name, ttl, res end |