diff options
author | Michael Fellinger <m.fellinger@gmail.com> | 2009-06-30 19:53:38 +0900 |
---|---|---|
committer | Michael Fellinger <m.fellinger@gmail.com> | 2009-06-30 19:53:38 +0900 |
commit | 4e53cc767057fd7d425f99e26b9f5131804096ef (patch) | |
tree | 0419018b25cded5ae8bc013415337e8b84d126dc | |
parent | 889d4d6c3186e2fffeea112a43f37766c6ccec19 (diff) | |
download | rack-4e53cc767057fd7d425f99e26b9f5131804096ef.tar.gz |
Set correct external_encoding for handlers that don't use RewindableInput
-rw-r--r-- | lib/rack/handler/lsws.rb | 21 | ||||
-rw-r--r-- | lib/rack/handler/mongrel.rb | 3 | ||||
-rw-r--r-- | lib/rack/handler/scgi.rb | 7 | ||||
-rw-r--r-- | lib/rack/handler/webrick.rb | 5 | ||||
-rw-r--r-- | lib/rack/mock.rb | 7 |
5 files changed, 30 insertions, 13 deletions
diff --git a/lib/rack/handler/lsws.rb b/lib/rack/handler/lsws.rb index 7231336d..b4ddf4bb 100644 --- a/lib/rack/handler/lsws.rb +++ b/lib/rack/handler/lsws.rb @@ -15,14 +15,19 @@ module Rack env = ENV.to_hash env.delete "HTTP_CONTENT_LENGTH" env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/" - env.update({"rack.version" => [1,0], - "rack.input" => StringIO.new($stdin.read.to_s), - "rack.errors" => $stderr, - "rack.multithread" => false, - "rack.multiprocess" => true, - "rack.run_once" => false, - "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http" - }) + + rack_input = RewindableInput.new($stdin.read.to_s) + + env.update( + "rack.version" => [1,0], + "rack.input" => rack_input, + "rack.errors" => $stderr, + "rack.multithread" => false, + "rack.multiprocess" => true, + "rack.run_once" => false, + "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http" + ) + env["QUERY_STRING"] ||= "" env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"] env["REQUEST_PATH"] ||= "/" diff --git a/lib/rack/handler/mongrel.rb b/lib/rack/handler/mongrel.rb index 3a5ef32d..f358d920 100644 --- a/lib/rack/handler/mongrel.rb +++ b/lib/rack/handler/mongrel.rb @@ -45,6 +45,9 @@ module Rack env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/" + rack_input = request.body || StringIO.new('') + rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding) + env.update({"rack.version" => [1,0], "rack.input" => request.body || StringIO.new(""), "rack.errors" => $stderr, diff --git a/lib/rack/handler/scgi.rb b/lib/rack/handler/scgi.rb index 6c4932df..bd860a5d 100644 --- a/lib/rack/handler/scgi.rb +++ b/lib/rack/handler/scgi.rb @@ -32,10 +32,13 @@ module Rack env["PATH_INFO"] = env["REQUEST_PATH"] env["QUERY_STRING"] ||= "" env["SCRIPT_NAME"] = "" + + rack_input = StringIO.new(input_body) + rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding) + env.update({"rack.version" => [1,0], - "rack.input" => StringIO.new(input_body), + "rack.input" => rack_input, "rack.errors" => $stderr, - "rack.multithread" => true, "rack.multiprocess" => true, "rack.run_once" => false, diff --git a/lib/rack/handler/webrick.rb b/lib/rack/handler/webrick.rb index a8b6ff56..5b9ae740 100644 --- a/lib/rack/handler/webrick.rb +++ b/lib/rack/handler/webrick.rb @@ -23,8 +23,11 @@ module Rack env = req.meta_vars env.delete_if { |k, v| v.nil? } + rack_input = StringIO.new(req.body.to_s) + rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding) + env.update({"rack.version" => [1,0], - "rack.input" => StringIO.new(req.body.to_s), + "rack.input" => rack_input, "rack.errors" => $stderr, "rack.multithread" => true, diff --git a/lib/rack/mock.rb b/lib/rack/mock.rb index fdefb034..4b85ea12 100644 --- a/lib/rack/mock.rb +++ b/lib/rack/mock.rb @@ -116,11 +116,14 @@ module Rack opts[:input] ||= "" if String === opts[:input] - env["rack.input"] = StringIO.new(opts[:input]) + rack_input = StringIO.new(opts[:input]) else - env["rack.input"] = opts[:input] + rack_input = opts[:input] end + rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding) + env['rack.input'] = rack_input + env["CONTENT_LENGTH"] ||= env["rack.input"].length.to_s opts.each { |field, value| |