summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-03-25 16:25:45 -0700
committerEric Wong <normalperson@yhbt.net>2009-03-25 16:28:02 -0700
commit9ccced22c38c30e776edc5c2513194623b42a7a9 (patch)
tree6f0c526e3681c8e10520d57fab57f82c2d06584a
parenta87866f83c0185757b2f85aeab17e2a9553b6ae1 (diff)
Otherwise we bloat TMPDIR and run the host out of space, oops!
-rw-r--r--lib/unicorn/http_request.rb1
-rw-r--r--test/unit/test_upload.rb26
2 files changed, 27 insertions, 0 deletions
diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb
index 411c56c..ee407ab 100644
--- a/lib/unicorn/http_request.rb
+++ b/lib/unicorn/http_request.rb
@@ -25,6 +25,7 @@ module Unicorn
       @parser.reset
       @params.clear
       @body.close rescue nil
+      @body.close! rescue nil
       @body = nil
     end
 
diff --git a/test/unit/test_upload.rb b/test/unit/test_upload.rb
index 41fc473..8246f65 100644
--- a/test/unit/test_upload.rb
+++ b/test/unit/test_upload.rb
@@ -50,6 +50,32 @@ class UploadTest < Test::Unit::TestCase
     assert_equal @sha1.hexdigest, resp[:sha1]
   end
 
+  def test_tempfile_unlinked
+    spew_path = lambda do |env|
+      if orig = env['HTTP_X_OLD_PATH']
+        assert orig != env['rack.input'].path
+      end
+      assert_equal length, env['rack.input'].size
+      [ 200, @hdr.merge('X-Tempfile-Path' => env['rack.input'].path), [] ]
+    end
+    start_server(spew_path)
+    sock = TCPSocket.new(@addr, @port)
+    sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
+    @count.times { sock.syswrite(' ' * @bs) }
+    path = sock.read[/^X-Tempfile-Path: (\S+)/, 1]
+    sock.close
+
+    # send another request to ensure we hit the next request
+    sock = TCPSocket.new(@addr, @port)
+    sock.syswrite("PUT / HTTP/1.0\r\nX-Old-Path: #{path}\r\n" \
+                  "Content-Length: #{length}\r\n\r\n")
+    @count.times { sock.syswrite(' ' * @bs) }
+    path2 = sock.read[/^X-Tempfile-Path: (\S+)/, 1]
+    sock.close
+    assert path != path2
+
+    assert ! File.exist?(path)
+  end
 
   def test_put_keepalive_truncates_small_overwrite
     start_server(@sha1_app)