[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]