Skip to content

Commit

Permalink
Don't create empty tempfile if no file was selected
Browse files Browse the repository at this point in the history
  • Loading branch information
josh committed Jan 21, 2009
1 parent 7409b0c commit a2a2600
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/rack/utils.rb
Expand Up @@ -291,7 +291,10 @@ def self.parse_multipart(env)
content_length = -1 if $1 == "--" content_length = -1 if $1 == "--"
end end


if filename if filename == ""
# filename is blank which means no file has been selected
data = nil
elsif filename
body.rewind body.rewind


# Take the basename of the upload's original filename. # Take the basename of the upload's original filename.
Expand Down
10 changes: 10 additions & 0 deletions test/multipart/empty
@@ -0,0 +1,10 @@
--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain


--AaB03x--
9 changes: 9 additions & 0 deletions test/multipart/none
@@ -0,0 +1,9 @@
--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename=""


--AaB03x--
20 changes: 20 additions & 0 deletions test/spec_rack_utils.rb
Expand Up @@ -184,6 +184,26 @@ def context env, app=@app; app.call(env); end
params["files"][:tempfile].read.length.should.equal 26473 params["files"][:tempfile].read.length.should.equal 26473
end end


specify "should parse multipart upload with empty file" do
env = Rack::MockRequest.env_for("/", multipart_fixture(:empty))
params = Rack::Utils::Multipart.parse_multipart(env)
params["submit-name"].should.equal "Larry"
params["files"][:type].should.equal "text/plain"
params["files"][:filename].should.equal "file1.txt"
params["files"][:head].should.equal "Content-Disposition: form-data; " +
"name=\"files\"; filename=\"file1.txt\"\r\n" +
"Content-Type: text/plain\r\n"
params["files"][:name].should.equal "files"
params["files"][:tempfile].read.should.equal ""
end

specify "should not create empty an tempfile if no file was selected" do
env = Rack::MockRequest.env_for("/", multipart_fixture(:none))
params = Rack::Utils::Multipart.parse_multipart(env)
params["submit-name"].should.equal "Larry"
params["files"].should.equal nil
end

specify "should parse IE multipart upload and clean up filename" do specify "should parse IE multipart upload and clean up filename" do
env = Rack::MockRequest.env_for("/", multipart_fixture(:ie)) env = Rack::MockRequest.env_for("/", multipart_fixture(:ie))
params = Rack::Utils::Multipart.parse_multipart(env) params = Rack::Utils::Multipart.parse_multipart(env)
Expand Down

0 comments on commit a2a2600

Please sign in to comment.