diff --git a/lib/net/http/response.rb b/lib/net/http/response.rb index b3b54bed..137744ad 100644 --- a/lib/net/http/response.rb +++ b/lib/net/http/response.rb @@ -188,11 +188,14 @@ def each_response_header(sock) line = read_line(sock, MAX_RESPONSE_HEADER_LENGTH, true) remaining -= line.bytesize raise Net::HTTPBadResponse, 'response header too large' if remaining < 0 - line = line.sub(/\s+\z/, '') + line = line.chomp break if line.empty? if line[0] == ?\s or line[0] == ?\t and value - value << ' ' unless value.empty? - value << line.strip + folded = line.strip + unless folded.empty? + value << ' ' unless value.empty? + value << folded + end else yield key, value if key key, value = line.strip.split(/\s*:\s*/, 2) diff --git a/test/net/http/test_httpresponse.rb b/test/net/http/test_httpresponse.rb index e845f80f..13e26727 100644 --- a/test/net/http/test_httpresponse.rb +++ b/test/net/http/test_httpresponse.rb @@ -93,6 +93,40 @@ def test_multiline_header assert_equal('XXX YYY', res['x-bar']) end + def test_multiline_header_whitespace_only + io = dummy_io(<