summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-03 05:14:26 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-03 05:14:26 +0000
commit3f59f0e06c4755babf5b667d13779951280d92f2 (patch)
tree68e557448b714c703ba7cf43a37675b9955b76dd /lib
parentbb9435a75ca13504304ef000a1469b096fdce4c2 (diff)
* lib/net/imap.rb: validate data before sending to a server.
[ruby-core:20320] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21998 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