Response headers need not be a hash according to SPEC,
so grab the io_lambda the first time we iterate through
the headers and avoid an extra hash lookup.
---
This is related to (but applies independently of) my lint
clarification for case-sensitivity.
The following changes since commit 9073125f71afd615091f575d74ec468a0b1b79bf:
bumping version (2016-05-06 15:51:18 -0500)
are available in the git repository at:
git://
80x24.org/rack.git webrick-header-each
for you to fetch changes up to 2c95a6e5bc18ac860ec0f7f7614ffb4aa6ad817d:
webrick: detect partial hijack without hash headers (2016-05-12 02:23:48 +0000)
----------------------------------------------------------------
Eric Wong (1):
webrick: detect partial hijack without hash headers
lib/rack/handler/webrick.rb | 8 ++++----
test/spec_webrick.rb | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/rack/handler/webrick.rb b/lib/rack/handler/webrick.rb
index 95aa892..d0fcd21 100644
--- a/lib/rack/handler/webrick.rb
+++ b/lib/rack/handler/webrick.rb
@@ -86,10 +86,11 @@ def service(req, res)
status, headers, body = @app.call(env)
begin
res.status = status.to_i
+ io_lambda = nil
headers.each { |k, vs|
- next if k.downcase == RACK_HIJACK
-
- if k.downcase == "set-cookie"
+ if k == RACK_HIJACK
+ io_lambda = vs
+ elsif k.downcase == "set-cookie"
res.cookies.concat vs.split("\n")
else
# Since WEBrick won't accept repeated headers,
@@ -98,7 +99,6 @@ def service(req, res)
end
}
- io_lambda = headers[RACK_HIJACK]
if io_lambda
rd, wr = IO.pipe
res.body = rd
diff --git a/test/spec_webrick.rb b/test/spec_webrick.rb
index 9ae6103..4a10c1c 100644
--- a/test/spec_webrick.rb
+++ b/test/spec_webrick.rb
@@ -171,7 +171,7 @@ def is_running?
Rack::Lint.new(lambda{ |req|
[
200,
- {"rack.hijack" => io_lambda},
+ [ [ "rack.hijack", io_lambda ] ],
[""]
]
})
--
EW