ruby-changes:32808
From: akr <ko1@a...>
Date: Sat, 8 Feb 2014 16:35:29 +0900 (JST)
Subject: [ruby-changes:32808] akr:r44887 (trunk): * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#get_labels):
akr 2014-02-08 16:35:24 +0900 (Sat, 08 Feb 2014) New Revision: 44887 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=44887 Log: * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#get_labels): Make it iterative. Modified files: trunk/ChangeLog trunk/lib/resolv.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 44886) +++ ChangeLog (revision 44887) @@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Sat Feb 8 16:34:36 2014 Tanaka Akira <akr@f...> + + * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#get_labels): + Make it iterative. + Sat Feb 8 15:54:12 2014 Koichi Sasada <ko1@a...> * gc.c, gc.h (rb_objspace_marked_object_p): added. Index: lib/resolv.rb =================================================================== --- lib/resolv.rb (revision 44886) +++ lib/resolv.rb (revision 44887) @@ -1572,30 +1572,33 @@ class Resolv https://github.com/ruby/ruby/blob/trunk/lib/resolv.rb#L1572 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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/