diff --git a/lib/webrick/httpresponse.rb b/lib/webrick/httpresponse.rb index 9b8837c5..dde0261d 100644 --- a/lib/webrick/httpresponse.rb +++ b/lib/webrick/httpresponse.rb @@ -122,7 +122,7 @@ def initialize(config) @status = HTTPStatus::RC_OK @reason_phrase = nil @http_version = HTTPVersion::convert(@config[:HTTPVersion]) - @body = '' + @body = +"" @keep_alive = true @cookies = [] @request_method = nil @@ -441,7 +441,7 @@ def check_header(header_value) # :stopdoc: def error_body(backtrace, ex, host, port) - @body = +'' + @body = +"" @body << <<-_end_of_html_ diff --git a/lib/webrick/version.rb b/lib/webrick/version.rb index 66c20a39..ceeefc33 100644 --- a/lib/webrick/version.rb +++ b/lib/webrick/version.rb @@ -14,5 +14,5 @@ module WEBrick ## # The WEBrick version - VERSION = "1.8.0" + VERSION = "1.8.1" end diff --git a/test/webrick/test_httpresponse.rb b/test/webrick/test_httpresponse.rb index 1a2bc3e0..83734533 100644 --- a/test/webrick/test_httpresponse.rb +++ b/test/webrick/test_httpresponse.rb @@ -28,6 +28,10 @@ def setup @res.keep_alive = true end + def test_response_body_not_frozen + refute @res.body.frozen? + end + def test_prevent_response_splitting_headers_crlf res['X-header'] = "malicious\r\nCookie: cracked_indicator_for_test" io = StringIO.new @@ -268,7 +272,7 @@ def test_send_body_proc_upgrade IO.pipe do |r, w| @res.send_response(w) w.close - assert_match /Connection: upgrade\r\nUpgrade: text\r\n\r\nhello/, r.read + assert_match(/Connection: upgrade\r\nUpgrade: text\r\n\r\nhello/, r.read) end assert_empty logger.messages end @@ -288,8 +292,10 @@ def test_send_body_proc_stream s2.write("hello") s2.close_write chunk = s2.read - assert_match /Connection: close\r\n\r\nhello/, chunk + assert_match(/Connection: close\r\n\r\nhello/, chunk) s2.close + + thread.join end assert_empty logger.messages end diff --git a/test/webrick/test_httpserver.rb b/test/webrick/test_httpserver.rb index 93838649..0c5a6147 100644 --- a/test/webrick/test_httpserver.rb +++ b/test/webrick/test_httpserver.rb @@ -541,21 +541,25 @@ def test_big_chunks end def test_accept_put_requests - TestWEBrick.start_httpserver {|server, addr, port, log| + TestWEBrick.start_httpserver do |server, addr, port, log| server.mount_proc("/", lambda {|req, res| res.status = 200 assert_equal("abcde", req.body) }) + Thread.pass while server.status != :Running Net::HTTP.start(addr, port) do |http| req = Net::HTTP::Put.new("/") req.body = "abcde" - http.request(req){|res| + req['content-type'] = "text/plain" + + http.request(req) do |res| assert_equal("200", res.code) - } + end + server.shutdown end - } + end end end