Skip to content

Commit f6cee1c

Browse files
authored
Merge pull request #1743 from tamazon/fix_EOFError
Handle EOFError raised by Rack and raise BadRequest (and lock Rack version to 2.0 to pass tests)
2 parents 59d8b26 + c29749d commit f6cee1c

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ source 'https://rubygems.org' unless ENV['QUICK']
1111
gemspec
1212

1313
gem 'rake'
14-
gem 'rack', git: 'https://github.com/rack/rack.git'
14+
gem 'rack', '~> 2.0'
1515
gem 'rack-test', '>= 0.6.2'
1616
gem "minitest", "~> 5.0"
1717
gem 'yard'

lib/sinatra/base.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ def params
7878
super
7979
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
8080
raise BadRequest, "Invalid query parameters: #{Rack::Utils.escape_html(e.message)}"
81+
rescue EOFError => e
82+
raise BadRequest, "Invalid multipart/form-data: #{Rack::Utils.escape_html(e.message)}"
8183
end
8284

8385
class AcceptEntry

test/request_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ class RequestTest < Minitest::Test
1717
assert_equal 'bar', request.params['foo']
1818
end
1919

20+
it 'raises Sinatra::BadRequest when multipart/form-data request has no content' do
21+
request = Sinatra::Request.new(
22+
'REQUEST_METHOD' => 'POST',
23+
'CONTENT_TYPE' => 'multipart/form-data; boundary=dummy',
24+
'rack.input' => StringIO.new('')
25+
)
26+
assert_raises(Sinatra::BadRequest) { request.params }
27+
end
28+
2029
it 'is secure when the url scheme is https' do
2130
request = Sinatra::Request.new('rack.url_scheme' => 'https')
2231
assert request.secure?

0 commit comments

Comments
 (0)