From 6d0abe5fd789226ead1d8c77da70236e76aa6b24 Mon Sep 17 00:00:00 2001 From: Evan Phoenix Date: Sat, 28 Apr 2012 09:51:08 -0700 Subject: [PATCH] Keep the encoding of the body correct. Fixes #79 --- lib/puma/server.rb | 5 ++--- test/test_rack_server.rb | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/puma/server.rb b/lib/puma/server.rb index 9f0b10ff..c7912bd4 100644 --- a/lib/puma/server.rb +++ b/lib/puma/server.rb @@ -568,12 +568,11 @@ module Puma if remain > MAX_BODY stream = Tempfile.new(Const::PUMA_TMP_BASE) stream.binmode + stream.write body else - stream = StringIO.new + stream = StringIO.new body end - stream.write body - # Read an odd sized chunk so we can read even sized ones # after this chunk = client.readpartial(remain % CHUNK_SIZE) diff --git a/test/test_rack_server.rb b/test/test_rack_server.rb index 80fcd234..f6fe5054 100644 --- a/test/test_rack_server.rb +++ b/test/test_rack_server.rb @@ -75,6 +75,24 @@ class TestRackServer < Test::Unit::TestCase end end + def test_large_post_body + @checker = ErrorChecker.new ServerLint.new(@simple) + @server.app = @checker + + @server.run + + big = "x" * (1024 * 16) + + Net::HTTP.post_form URI.parse('http://localhost:9998/test'), + { "big" => big } + + stop + + if exc = @checker.exception + raise exc + end + end + def test_path_info input = nil @server.app = lambda { |env| input = env; @simple.call(env) } @@ -119,4 +137,5 @@ class TestRackServer < Test::Unit::TestCase assert_match %r!GET /test HTTP/1\.1!, log.string end + end