Skip to content

Commit

Permalink
Clean up Safari's ajax POST body
Browse files Browse the repository at this point in the history
  • Loading branch information
josh committed Jan 21, 2009
1 parent a2a2600 commit 0f081dd
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
9 changes: 7 additions & 2 deletions lib/rack/request.rb
Expand Up @@ -119,8 +119,13 @@ def POST
@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)
Expand Down
6 changes: 6 additions & 0 deletions test/spec_rack_request.rb
Expand Up @@ -103,6 +103,12 @@
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")
Expand Down

0 comments on commit 0f081dd

Please sign in to comment.