* 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
This commit is contained in:
parent
bb9435a75c
commit
3f59f0e06c
@ -1,3 +1,8 @@
|
|||||||
|
Tue Feb 3 14:12:10 2009 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/net/imap.rb: validate data before sending to a server.
|
||||||
|
[ruby-core:20320]
|
||||||
|
|
||||||
Tue Feb 3 12:09:08 2009 Shugo Maeda <shugo@ruby-lang.org>
|
Tue Feb 3 12:09:08 2009 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
* lib/net/imap.rb (hmac_md5): should use String#ord to get ascii
|
* lib/net/imap.rb (hmac_md5): should use String#ord to get ascii
|
||||||
|
@ -1062,6 +1062,9 @@ module Net
|
|||||||
|
|
||||||
def send_command(cmd, *args, &block)
|
def send_command(cmd, *args, &block)
|
||||||
synchronize do
|
synchronize do
|
||||||
|
args.each do |i|
|
||||||
|
validate_data(i)
|
||||||
|
end
|
||||||
tag = generate_tag
|
tag = generate_tag
|
||||||
put_string(tag + " " + cmd)
|
put_string(tag + " " + cmd)
|
||||||
args.each do |i|
|
args.each do |i|
|
||||||
@ -1105,6 +1108,25 @@ module Net
|
|||||||
end
|
end
|
||||||
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)
|
def send_data(data)
|
||||||
case data
|
case data
|
||||||
when nil
|
when nil
|
||||||
@ -1151,9 +1173,6 @@ module Net
|
|||||||
end
|
end
|
||||||
|
|
||||||
def send_number_data(num)
|
def send_number_data(num)
|
||||||
if num < 0 || num >= 4294967296
|
|
||||||
raise DataFormatError, num.to_s
|
|
||||||
end
|
|
||||||
put_string(num.to_s)
|
put_string(num.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1309,6 +1328,9 @@ module Net
|
|||||||
imap.send(:put_string, @data)
|
imap.send(:put_string, @data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def initialize(data)
|
def initialize(data)
|
||||||
@ -1321,6 +1343,9 @@ module Net
|
|||||||
imap.send(:put_string, @data)
|
imap.send(:put_string, @data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def initialize(data)
|
def initialize(data)
|
||||||
@ -1333,6 +1358,9 @@ module Net
|
|||||||
imap.send(:send_quoted_string, @data)
|
imap.send(:send_quoted_string, @data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def initialize(data)
|
def initialize(data)
|
||||||
@ -1345,6 +1373,9 @@ module Net
|
|||||||
imap.send(:send_literal, @data)
|
imap.send(:send_literal, @data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def initialize(data)
|
def initialize(data)
|
||||||
@ -1357,6 +1388,10 @@ module Net
|
|||||||
imap.send(:put_string, format_internal(@data))
|
imap.send(:put_string, format_internal(@data))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate
|
||||||
|
validate_internal(@data)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def initialize(data)
|
def initialize(data)
|
||||||
@ -1368,7 +1403,6 @@ module Net
|
|||||||
when "*"
|
when "*"
|
||||||
return data
|
return data
|
||||||
when Integer
|
when Integer
|
||||||
ensure_nz_number(data)
|
|
||||||
if data == -1
|
if data == -1
|
||||||
return "*"
|
return "*"
|
||||||
else
|
else
|
||||||
@ -1382,6 +1416,23 @@ module Net
|
|||||||
when ThreadMember
|
when ThreadMember
|
||||||
return data.seqno.to_s +
|
return data.seqno.to_s +
|
||||||
":" + data.children.collect {|i| format_internal(i).join(",")}
|
":" + 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
|
else
|
||||||
raise DataFormatError, data.inspect
|
raise DataFormatError, data.inspect
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user