diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-08 07:35:24 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-08 07:35:24 +0000 |
commit | f01b5e217b2a4865f2af6e680181e362ee3f4480 (patch) | |
tree | b1de5d1133fe633c167e036e30dbe4c7088604fa /lib/resolv.rb | |
parent | c6f2c9383f446f92e482a6e1c7e13772affde8d7 (diff) | |
download | ruby-f01b5e217b2a4865f2af6e680181e362ee3f4480.tar.gz |
* lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#get_labels):
Make it iterative.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44887 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/resolv.rb')
-rw-r--r-- | lib/resolv.rb | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/lib/resolv.rb b/lib/resolv.rb index 0421da4377..2789aa1c12 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -1572,30 +1572,33 @@ class Resolv return Name.new(self.get_labels) end - def get_labels(limit=nil) - limit = @index if !limit || @index < limit + def get_labels + prev_index = @index + save_index = nil d = [] while true raise DecodeError.new("limit exceeded") if @limit <= @index case @data[@index].ord when 0 @index += 1 + if save_index + @index = save_index + end return d when 192..255 idx = self.get_unpack('n')[0] & 0x3fff - if limit <= idx + if prev_index <= idx raise DecodeError.new("non-backward name pointer") end - save_index = @index + prev_index = idx + if !save_index + save_index = @index + end @index = idx - d += self.get_labels(limit) - @index = save_index - return d else d << self.get_label end end - return d end def get_label |