summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-22 04:30:46 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-22 04:30:46 +0000
commit898d31362a4370fb277902d813607c622b94274f (patch)
treea6d6cd6d589a02e6424fd6d13c4bac4e0386618a /lib
parent0d1513fa3d103a2f1976e359e85092f550ece3ed (diff)
merges r21998 from trunk into ruby_1_9_1.
* lib/net/imap.rb: validate data before sending to a server. [ruby-core:20320] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22503 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/net/imap.rb59
1 files changed, 55 insertions, 4 deletions
diff --git a/lib/net/imap.rb b/lib/net/imap.rb
index d07dd42722..ea2b598606 100644
--- a/lib/net/imap.rb
+++ b/lib/net/imap.rb
@@ -1062,6 +1062,9 @@ module Net
def send_command(cmd, *args, &block)
synchronize do
+ args.each do |i|
+ validate_data(i)
+ end
tag = generate_tag
put_string(tag + " " + cmd)
args.each do |i|
@@ -1105,6 +1108,25 @@ module Net
end
end
+ def validate_data(data)
+ case data
+ when nil
+ when String
+ when Integer
+ if data < 0 || data >= 4294967296
+ raise DataFormatError, num.to_s
+ end
+ when Array
+ data.each do |i|
+ validate_data(i)
+ end
+ when Time
+ when Symbol
+ else
+ data.validate
+ end
+ end
+
def send_data(data)
case data
when nil
@@ -1151,9 +1173,6 @@ module Net
end
def send_number_data(num)
- if num < 0 || num >= 4294967296
- raise DataFormatError, num.to_s
- end
put_string(num.to_s)
end
@@ -1309,6 +1328,9 @@ module Net
imap.send(:put_string, @data)
end
+ def validate
+ end
+
private
def initialize(data)
@@ -1321,6 +1343,9 @@ module Net
imap.send(:put_string, @data)
end
+ def validate
+ end
+
private
def initialize(data)
@@ -1333,6 +1358,9 @@ module Net
imap.send(:send_quoted_string, @data)
end
+ def validate
+ end
+
private
def initialize(data)
@@ -1345,6 +1373,9 @@ module Net
imap.send(:send_literal, @data)
end
+ def validate
+ end
+
private
def initialize(data)
@@ -1357,6 +1388,10 @@ module Net
imap.send(:put_string, format_internal(@data))
end
+ def validate
+ validate_internal(@data)
+ end
+
private
def initialize(data)
@@ -1368,7 +1403,6 @@ module Net
when "*"
return data
when Integer
- ensure_nz_number(data)
if data == -1
return "*"
else
@@ -1382,6 +1416,23 @@ module Net
when ThreadMember
return data.seqno.to_s +
":" + data.children.collect {|i| format_internal(i).join(",")}
+ end
+ end
+
+ def validate_internal(data)
+ case data
+ when "*"
+ when Integer
+ ensure_nz_number(data)
+ when Range
+ when Array
+ data.each do |i|
+ validate_internal(i)
+ end
+ when ThreadMember
+ data.children.each do |i|
+ validate_internal(i)
+ end
else
raise DataFormatError, data.inspect
end