diff options
-rw-r--r-- | lib/mongrel.rb | 6 | ||||
-rw-r--r-- | test/test_response.rb | 13 |
2 files changed, 18 insertions, 1 deletions
diff --git a/lib/mongrel.rb b/lib/mongrel.rb index 3bb5447..f30c221 100644 --- a/lib/mongrel.rb +++ b/lib/mongrel.rb @@ -322,12 +322,16 @@ module Mongrel attr_reader :out def initialize(out) + @sent = {} @out = out end # Simply writes "#{key}: #{value}" to an output buffer. def[]=(key,value) - @out.write(Const::HEADER_FORMAT % [key, value]) + if not @sent.has_key?(key) + @sent[key] = true + @out.write(Const::HEADER_FORMAT % [key, value]) + end end end diff --git a/test/test_response.rb b/test/test_response.rb index b68c1ef..c5e1084 100644 --- a/test/test_response.rb +++ b/test/test_response.rb @@ -37,6 +37,19 @@ class ResponseTest < Test::Unit::TestCase assert io.length > 0, "output didn't have data" end + def test_response_duplicate_header_squash + io = StringIO.new + resp = HttpResponse.new(io) + resp.start do |head,out| + head["Content-Length"] = 30 + head["Content-Length"] = 0 + end + + resp.finished + + assert_equal io.length, 95, "too much output" + end + def test_response_404 io = StringIO.new |