From 7919886a40c9200fabeb48b8d5c3f5f17821fd2e Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sun, 18 Jan 2009 10:52:05 -0600 Subject: [PATCH] Clean up Safari's ajax POST body --- lib/rack/request.rb | 9 +++++++-- test/spec_rack_request.rb | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/rack/request.rb b/lib/rack/request.rb index 4a0c85b..fa948b1 100644 --- a/lib/rack/request.rb +++ b/lib/rack/request.rb @@ -119,8 +119,13 @@ module Rack @env["rack.request.form_input"] = @env["rack.input"] unless @env["rack.request.form_hash"] = Utils::Multipart.parse_multipart(env) - @env["rack.request.form_vars"] = @env["rack.input"].read - @env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"]) + form_vars = @env["rack.input"].read + + # Fix for Safari Ajax postings that always append \0 + form_vars.sub!(/\0\z/, '') + + @env["rack.request.form_vars"] = form_vars + @env["rack.request.form_hash"] = Utils.parse_query(form_vars) begin @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind) diff --git a/test/spec_rack_request.rb b/test/spec_rack_request.rb index 6061127..f33c266 100644 --- a/test/spec_rack_request.rb +++ b/test/spec_rack_request.rb @@ -103,6 +103,12 @@ context "Rack::Request" do req.params.should.equal "foo" => "bar", "quux" => "bla" end + specify "cleans up Safari's ajax POST body" do + req = Rack::Request.new \ + Rack::MockRequest.env_for("/", :input => "foo=bar&quux=bla\0") + req.POST.should.equal "foo" => "bar", "quux" => "bla" + end + specify "can get value by key from params with #[]" do req = Rack::Request.new \ Rack::MockRequest.env_for("?foo=quux") -- 1.6.0.4