From 5db554e70ef4fae2e45a62508b9510cc3407af5e Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Mon, 29 Dec 2008 11:49:29 -0600 Subject: [PATCH] Don't try to rewind CGI input --- lib/rack/request.rb | 2 +- test/spec_rack_request.rb | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/rack/request.rb b/lib/rack/request.rb index 25d6afb..4447d03 100644 --- a/lib/rack/request.rb +++ b/lib/rack/request.rb @@ -121,7 +121,7 @@ module Rack 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"]) - @env["rack.input"].rewind + @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind) end @env["rack.request.form_hash"] else diff --git a/test/spec_rack_request.rb b/test/spec_rack_request.rb index b999572..15931bf 100644 --- a/test/spec_rack_request.rb +++ b/test/spec_rack_request.rb @@ -93,6 +93,16 @@ context "Rack::Request" do input.read.should.equal "foo=bar&quux=bla" end + specify "does not rewind unwindable CGI input" do + input = StringIO.new("foo=bar&quux=bla") + input.instance_eval "undef :rewind" + req = Rack::Request.new \ + Rack::MockRequest.env_for("/", + "CONTENT_TYPE" => 'application/x-www-form-urlencoded;foo=bar', + :input => input) + req.params.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") @@ -437,13 +447,13 @@ EOF specify "memoizes itself to reduce the cost of repetitive initialization" do env = Rack::MockRequest.env_for("http://example.com:8080/") env['rack.request'].should.be.nil - + req1 = Rack::Request.new(env) env['rack.request'].should.not.be.nil req1.should.equal env['rack.request'] - + rack_request_object_id = env['rack.request'].object_id - + req2 = Rack::Request.new(env) env['rack.request'].should.not.be.nil rack_request_object_id.should.be.equal env['rack.request'].object_id -- 1.6.0.4