From 898d31362a4370fb277902d813607c622b94274f Mon Sep 17 00:00:00 2001 From: yugui Date: Sun, 22 Feb 2009 04:30:46 +0000 Subject: 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 --- lib/net/imap.rb | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) (limited to 'lib') 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 -- cgit v1.2.3