aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-18 09:09:46 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-18 09:09:46 +0000
commit20a6e94e4758334209a1c3d241737c84d759daad (patch)
treefa2e7afa3901e2860272ce4d668051ae53d81544
parente70a308c75072121ec780ae571fc32db3fe87737 (diff)
downloadruby-20a6e94e4758334209a1c3d241737c84d759daad.tar.gz
* lib/resolv.rb (Resolv::IPv4::Regex): make it only accept 0 to 255.
[ruby-core:29501] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27389 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--lib/resolv.rb6
-rw-r--r--test/resolv/test_addr.rb16
3 files changed, 26 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index dbd13656be..eb0c8fa2f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Apr 18 18:07:47 2010 Tanaka Akira <akr@fsij.org>
+
+ * 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@ruby-lang.org>
* parse.y (parser_yylex): seems like a symbol-literal when spaces
diff --git a/lib/resolv.rb b/lib/resolv.rb
index 5a6032c604..9a96c55931 100644
--- a/lib/resolv.rb
+++ b/lib/resolv.rb
@@ -2110,7 +2110,11 @@ class Resolv
##
# 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
diff --git a/test/resolv/test_addr.rb b/test/resolv/test_addr.rb
new file mode 100644
index 0000000000..84bc8c2d3b
--- /dev/null
+++ b/test/resolv/test_addr.rb
@@ -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