mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
c6f2c9383f
commit
f01b5e217b
2 changed files with 16 additions and 8 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Sat Feb 8 16:34:36 2014 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#get_labels):
|
||||||
|
Make it iterative.
|
||||||
|
|
||||||
Sat Feb 8 15:54:12 2014 Koichi Sasada <ko1@atdot.net>
|
Sat Feb 8 15:54:12 2014 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* gc.c, gc.h (rb_objspace_marked_object_p): added.
|
* gc.c, gc.h (rb_objspace_marked_object_p): added.
|
||||||
|
|
|
@ -1572,30 +1572,33 @@ class Resolv
|
||||||
return Name.new(self.get_labels)
|
return Name.new(self.get_labels)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_labels(limit=nil)
|
def get_labels
|
||||||
limit = @index if !limit || @index < limit
|
prev_index = @index
|
||||||
|
save_index = nil
|
||||||
d = []
|
d = []
|
||||||
while true
|
while true
|
||||||
raise DecodeError.new("limit exceeded") if @limit <= @index
|
raise DecodeError.new("limit exceeded") if @limit <= @index
|
||||||
case @data[@index].ord
|
case @data[@index].ord
|
||||||
when 0
|
when 0
|
||||||
@index += 1
|
@index += 1
|
||||||
|
if save_index
|
||||||
|
@index = save_index
|
||||||
|
end
|
||||||
return d
|
return d
|
||||||
when 192..255
|
when 192..255
|
||||||
idx = self.get_unpack('n')[0] & 0x3fff
|
idx = self.get_unpack('n')[0] & 0x3fff
|
||||||
if limit <= idx
|
if prev_index <= idx
|
||||||
raise DecodeError.new("non-backward name pointer")
|
raise DecodeError.new("non-backward name pointer")
|
||||||
end
|
end
|
||||||
save_index = @index
|
prev_index = idx
|
||||||
|
if !save_index
|
||||||
|
save_index = @index
|
||||||
|
end
|
||||||
@index = idx
|
@index = idx
|
||||||
d += self.get_labels(limit)
|
|
||||||
@index = save_index
|
|
||||||
return d
|
|
||||||
else
|
else
|
||||||
d << self.get_label
|
d << self.get_label
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return d
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_label
|
def get_label
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue