diff options
author | Carl Zulauf <carl@linkleaf.com> | 2016-12-29 11:32:38 -0600 |
---|---|---|
committer | Carl Zulauf <carl@linkleaf.com> | 2016-12-29 11:32:38 -0600 |
commit | ea8479d606a6afda08ecb89057e5593f04fd5f3b (patch) | |
tree | d1a0fdfdc363f5cb6dd5b5cc4676d2544db3a56a | |
parent | db45a93daab59ddee520890d104701bf089ccd2b (diff) | |
download | rack-ea8479d606a6afda08ecb89057e5593f04fd5f3b.tar.gz |
Write MethodOverride errors to RACK_ERRORS
-rw-r--r-- | lib/rack/method_override.rb | 5 | ||||
-rw-r--r-- | test/spec_method_override.rb | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/rack/method_override.rb b/lib/rack/method_override.rb index 244214b1..06df21f7 100644 --- a/lib/rack/method_override.rb +++ b/lib/rack/method_override.rb @@ -37,7 +37,10 @@ module Rack def method_override_param(req) req.POST[METHOD_OVERRIDE_PARAM_KEY] - rescue Utils::InvalidParameterError, Utils::ParameterTypeError, EOFError + rescue Utils::InvalidParameterError, Utils::ParameterTypeError + req.get_header(RACK_ERRORS).puts "Invalid or incomplete POST params" + rescue EOFError + req.get_header(RACK_ERRORS).puts "Bad request content body" end end end diff --git a/test/spec_method_override.rb b/test/spec_method_override.rb index 9352e399..bb72af9f 100644 --- a/test/spec_method_override.rb +++ b/test/spec_method_override.rb @@ -71,6 +71,22 @@ EOF env["REQUEST_METHOD"].must_equal "POST" end + it "writes error to RACK_ERRORS when given invalid multipart form data" do + input = <<EOF +--AaB03x\r +content-disposition: form-data; name="huge"; filename="huge"\r +EOF + env = Rack::MockRequest.env_for("/", + "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x", + "CONTENT_LENGTH" => input.size.to_s, + Rack::RACK_ERRORS => StringIO.new, + :method => "POST", :input => input) + Rack::MethodOverride.new(proc { [200, {"Content-Type" => "text/plain"}, []] }).call env + + env[Rack::RACK_ERRORS].rewind + env[Rack::RACK_ERRORS].read.must_match /Bad request content body/ + end + it "not modify REQUEST_METHOD for POST requests when the params are unparseable" do env = Rack::MockRequest.env_for("/", :method => "POST", :input => "(%bad-params%)") app.call env |