From 7fd78fad3e9d650f7dcdfdd40b3045e3a5443f20 Mon Sep 17 00:00:00 2001 From: xibbar Date: Sat, 9 Jul 2011 05:32:19 +0000 Subject: [PATCH] * lib/cgi/core.rb: fix multipart form parsing bug. [Bug #3866] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32469 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ lib/cgi/core.rb | 1 - test/cgi/test_cgi_multipart.rb | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index fd338aed71..2fed9e6bb4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat Jul 9 14:02:20 2011 Takeyuki FUJIOKA + + * lib/cgi/core.rb: fix multipart form parsing bug. [Bug #3866] + Sat Jul 9 11:41:03 2011 Marc-Andre Lafortune * lib/matrix.rb: Add Vector#normalize [ruby-dev:43829] diff --git a/lib/cgi/core.rb b/lib/cgi/core.rb index 5759fd44bd..824c80e5a0 100644 --- a/lib/cgi/core.rb +++ b/lib/cgi/core.rb @@ -557,7 +557,6 @@ class CGI @files[name]=body end ## break loop - break if buf.size == 0 break if content_length == -1 end raise EOFError, "bad boundary end of body part" unless boundary_end =~ /--/ diff --git a/test/cgi/test_cgi_multipart.rb b/test/cgi/test_cgi_multipart.rb index c123aa80b5..b51bb7fe2c 100644 --- a/test/cgi/test_cgi_multipart.rb +++ b/test/cgi/test_cgi_multipart.rb @@ -272,7 +272,7 @@ class CGIMultipartTest < Test::Unit::TestCase ex = assert_raise(EOFError) do cgi = RUBY_VERSION>="1.9" ? CGI.new(:accept_charset=>"UTF-8") : CGI.new end - assert_equal("bad boundary end of body part", ex.message) + assert_equal("bad content body", ex.message) # _prepare(@data) do |input| input2 = input.sub(/--(\r\n)?\z/, "") @@ -303,6 +303,19 @@ class CGIMultipartTest < Test::Unit::TestCase assert_equal('file1.html', cgi['file1'].original_filename) end + def test_cgi_multipart_boundary_10240 # [Bug #3866] + @boundary = 'AaB03x' + @data = [ + {:name=>'file', :value=>"b"*10134, + :filename=>'file.txt', :content_type=>'text/plain'}, + {:name=>'foo', :value=>"bar"}, + ] + _prepare(@data) + cgi = RUBY_VERSION>="1.9" ? CGI.new(:accept_charset=>"UTF-8") : CGI.new + assert_equal(cgi['foo'], 'bar') + assert_equal(cgi['file'].read, 'b'*10134) + end + ### self.instance_methods.each do |method|