ruby-changes:10448
From: shugo <ko1@a...>
Date: Tue, 3 Feb 2009 14:14:41 +0900 (JST)
Subject: [ruby-changes:10448] Ruby:r21998 (trunk): * lib/net/imap.rb: validate data before sending to a server.
shugo 2009-02-03 14:14:26 +0900 (Tue, 03 Feb 2009) New Revision: 21998 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21998 Log: * lib/net/imap.rb: validate data before sending to a server. [ruby-core:20320] Modified files: trunk/ChangeLog trunk/lib/net/imap.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 21997) +++ ChangeLog (revision 21998) @@ -1,3 +1,8 @@ +Tue Feb 3 14:12:10 2009 Shugo Maeda <shugo@r...> + + * lib/net/imap.rb: validate data before sending to a server. + [ruby-core:20320] + Tue Feb 3 12:09:08 2009 Shugo Maeda <shugo@r...> * lib/net/imap.rb (hmac_md5): should use String#ord to get ascii Index: lib/net/imap.rb =================================================================== --- lib/net/imap.rb (revision 21997) +++ lib/net/imap.rb (revision 21998) @@ -1062,6 +1062,9 @@ 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 @@ 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 @@ 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 @@ imap.send(:put_string, @data) end + def validate + end + private def initialize(data) @@ -1321,6 +1343,9 @@ imap.send(:put_string, @data) end + def validate + end + private def initialize(data) @@ -1333,6 +1358,9 @@ imap.send(:send_quoted_string, @data) end + def validate + end + private def initialize(data) @@ -1345,6 +1373,9 @@ imap.send(:send_literal, @data) end + def validate + end + private def initialize(data) @@ -1357,6 +1388,10 @@ imap.send(:put_string, format_internal(@data)) end + def validate + validate_internal(@data) + end + private def initialize(data) @@ -1368,7 +1403,6 @@ when "*" return data when Integer - ensure_nz_number(data) if data == -1 return "*" else @@ -1382,6 +1416,23 @@ 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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/