diff options
-rw-r--r-- | lib/unicorn/http_response.rb | 2 | ||||
-rw-r--r-- | test/unit/test_response.rb | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/unicorn/http_response.rb b/lib/unicorn/http_response.rb index c1aa738..7b446c2 100644 --- a/lib/unicorn/http_response.rb +++ b/lib/unicorn/http_response.rb @@ -37,7 +37,7 @@ module Unicorn::HttpResponse # key in Rack < 1.5 hijack = value else - if value.include?("\n".freeze) + if value =~ /\n/ # avoiding blank, key-only cookies with /\n+/ value.split(/\n+/).each { |v| buf << "#{key}: #{v}\r\n" } else diff --git a/test/unit/test_response.rb b/test/unit/test_response.rb index 0b14d59..fbe433f 100644 --- a/test/unit/test_response.rb +++ b/test/unit/test_response.rb @@ -33,6 +33,15 @@ class ResponseTest < Test::Unit::TestCase assert out.length > 0, "output didn't have data" end + # ref: <CAO47=rJa=zRcLn_Xm4v2cHPr6c0UswaFC_omYFEH+baSxHOWKQ@mail.gmail.com> + def test_response_header_broken_nil + out = StringIO.new + http_response_write(out, 200, {"Nil" => nil}, %w(hysterical raisin)) + assert ! out.closed? + + assert_match %r{^Nil: \r\n}sm, out.string, 'nil accepted' + end + def test_response_string_status out = StringIO.new http_response_write(out,'200', {}, []) |