Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Ignore illegal seeks on body rewind. Catches CGI errors depending on …

…your httpd. Closes #10404 [Curtis Hawthorne]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8327 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit db885e81b9dc918a75bd66b1631a13e10447d0ff 1 parent 2766f76
Jeremy Kemper jeremy authored
8 actionpack/lib/action_controller/request.rb
View
@@ -588,7 +588,13 @@ def read_multipart(body, boundary, content_length, env)
end
raise EOFError, "bad boundary end of body part" unless boundary_end=~/--/
- body.rewind if body.respond_to?(:rewind)
+ begin
+ body.rewind if body.respond_to?(:rewind)
+ rescue Errno::ESPIPE
+ # Handles exceptions raised by input streams that cannot be rewound
+ # such as when using plain CGI under Apache
+ end
+
params
end
end
10 actionpack/test/controller/request_test.rb
View
@@ -736,6 +736,16 @@ def test_large_text_file
assert ('a' * 20480) == file.read
end
+ uses_mocha "test_no_rewind_stream" do
+ def test_no_rewind_stream
+ # Ensures that parse_multipart_form_parameters works with streams that cannot be rewound
+ file = File.open(File.join(FIXTURE_PATH, 'large_text_file'), 'rb')
+ file.expects(:rewind).raises(Errno::ESPIPE)
+ params = ActionController::AbstractRequest.parse_multipart_form_parameters(file, 'AaB03x', file.stat.size, {})
+ assert_not_equal 0, file.pos # file was not rewound after reading
+ end
+ end
+
def test_binary_file
params = process('binary_file')
assert_equal %w(file flowers foo), params.keys.sort
Please sign in to comment.
Something went wrong with that request. Please try again.