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

ruby-changes:15488

From: akr <ko1@a...>
Date: Sun, 18 Apr 2010 18:10:02 +0900 (JST)
Subject: [ruby-changes:15488] Ruby:r27389 (trunk): * lib/resolv.rb (Resolv::IPv4::Regex): make it only accept 0 to 255.

akr	2010-04-18 18:09:46 +0900 (Sun, 18 Apr 2010)

  New Revision: 27389

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27389

  Log:
    * lib/resolv.rb (Resolv::IPv4::Regex): make it only accept 0 to 255.
      [ruby-core:29501]

  Added files:
    trunk/test/resolv/test_addr.rb
  Modified files:
    trunk/ChangeLog
    trunk/lib/resolv.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 27388)
+++ ChangeLog	(revision 27389)
@@ -1,3 +1,8 @@
+Sun Apr 18 18:07:47 2010  Tanaka Akira  <akr@f...>
+
+	* lib/resolv.rb (Resolv::IPv4::Regex): make it only accept 0 to 255.
+	  [ruby-core:29501]
+
 Sun Apr 18 12:48:51 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (parser_yylex): seems like a symbol-literal when spaces
Index: lib/resolv.rb
===================================================================
--- lib/resolv.rb	(revision 27388)
+++ lib/resolv.rb	(revision 27389)
@@ -2110,7 +2110,11 @@
     ##
     # Regular expression IPv4 addresses must match.
 
-    Regex = /\A(\d+)\.(\d+)\.(\d+)\.(\d+)\z/
+    Regex256 = /0
+               |1(?:[0-9][0-9]?)?
+               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
+               |[3-9][0-9]?/x
+    Regex = /\A(#{Regex256})\.(#{Regex256})\.(#{Regex256})\.(#{Regex256})\z/
 
     def self.create(arg)
       case arg
Index: test/resolv/test_addr.rb
===================================================================
--- test/resolv/test_addr.rb	(revision 0)
+++ test/resolv/test_addr.rb	(revision 27389)
@@ -0,0 +1,16 @@
+require 'test/unit'
+require 'resolv'
+require 'socket'
+
+class TestResolvAddr < Test::Unit::TestCase
+  def test_invalid_ipv4_address
+    assert_not_match(Resolv::IPv4::Regex, "1.2.3.256", "[ruby-core:29501]")
+    1000.times {|i|
+      if i < 256
+        assert_match(Resolv::IPv4::Regex, "#{i}.#{i}.#{i}.#{i}")
+      else
+        assert_not_match(Resolv::IPv4::Regex, "#{i}.#{i}.#{i}.#{i}")
+      end
+    }
+  end
+end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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