From 65046459d648cd8c662f10a74e9588f55654c054 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 13 Jan 2009 22:45:46 -0600 Subject: [PATCH] Clean up Safari's ajax POST body --- lib/rack/request.rb | 8 +++++++- test/spec_rack_request.rb | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletions(-) diff --git a/lib/rack/request.rb b/lib/rack/request.rb index 4447d03..2cbc0e1 100644 --- a/lib/rack/request.rb +++ b/lib/rack/request.rb @@ -119,7 +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 + form_vars = @env["rack.input"].read + + # Fix for Safari Ajax postings that always append \0 + form_vars.chop! if form_vars[-1] == 0 + form_vars.sub!(/&_=$/, '') + + @env["rack.request.form_vars"] = form_vars @env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"]) @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind) end diff --git a/test/spec_rack_request.rb b/test/spec_rack_request.rb index 15931bf..67dbfc6 100644 --- a/test/spec_rack_request.rb +++ b/test/spec_rack_request.rb @@ -103,6 +103,16 @@ 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" + + req = Rack::Request.new \ + Rack::MockRequest.env_for("/", :input => "foo=bar&quux=bla&_=") + 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