summary refs log tree commit
diff options
context:
space:
mode:
authorCarl Zulauf <carl@linkleaf.com>2016-12-29 11:32:38 -0600
committerCarl Zulauf <carl@linkleaf.com>2016-12-29 11:32:38 -0600
commitea8479d606a6afda08ecb89057e5593f04fd5f3b (patch)
treed1a0fdfdc363f5cb6dd5b5cc4676d2544db3a56a
parentdb45a93daab59ddee520890d104701bf089ccd2b (diff)
downloadrack-ea8479d606a6afda08ecb89057e5593f04fd5f3b.tar.gz
Write MethodOverride errors to RACK_ERRORS
-rw-r--r--lib/rack/method_override.rb5
-rw-r--r--test/spec_method_override.rb16
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