From 2723c2eccaf5a29d20c9118bfce9688a885f2cbc Mon Sep 17 00:00:00 2001 From: Tom Wardrop Date: Fri, 24 Oct 2014 11:30:05 +1000 Subject: [PATCH] Rewrite of Request#POST --- lib/rack/request.rb | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/rack/request.rb b/lib/rack/request.rb index e6e46e9d1..7bd361f00 100644 --- a/lib/rack/request.rb +++ b/lib/rack/request.rb @@ -199,28 +199,27 @@ def GET # This method support both application/x-www-form-urlencoded and # multipart/form-data. def POST - if @env["rack.input"].nil? - raise "Missing rack.input" - elsif @env["rack.request.form_input"].equal? @env["rack.input"] - @env["rack.request.form_hash"] - elsif form_data? || parseable_data? - unless @env["rack.request.form_hash"] = parse_multipart(env) + raise "Missing rack.input" if @env["rack.input"].nil? + @env["rack.request.form_hash"] ||= {} + + if !(@env["rack.request.form_input"].equal? @env["rack.input"]) && (form_data? || parseable_data?) + parsed_result = parse_multipart(env) + if parsed_result + @env["rack.request.form_hash"].merge! parsed_result + else form_vars = @env["rack.input"].read - # Fix for Safari Ajax postings that always append \0 # form_vars.sub!(/\0\z/, '') # performance replacement: form_vars.slice!(-1) if form_vars[-1] == ?\0 @env["rack.request.form_vars"] = form_vars - @env["rack.request.form_hash"] = parse_query(form_vars) - + @env["rack.request.form_hash"].merge! parse_query(form_vars) @env["rack.input"].rewind end @env["rack.request.form_input"] = @env["rack.input"] - @env["rack.request.form_hash"] - else - {} end + + @env["rack.request.form_hash"] end # The union of GET and POST data.