From df65a73f77f65b1fbe0dfd027347eec3732a2883 Mon Sep 17 00:00:00 2001 From: tamazon <35480652+tamazon@users.noreply.github.com> Date: Mon, 31 Jan 2022 02:27:32 +0900 Subject: [PATCH 1/2] Handle EOFError raised by Rack --- lib/sinatra/base.rb | 2 ++ test/request_test.rb | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 92887ed167..6ced0a6d48 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -78,6 +78,8 @@ def params super rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e raise BadRequest, "Invalid query parameters: #{Rack::Utils.escape_html(e.message)}" + rescue EOFError => e + raise BadRequest, "Invalid multipart/form-data: #{Rack::Utils.escape_html(e.message)}" end class AcceptEntry diff --git a/test/request_test.rb b/test/request_test.rb index f4ba50a245..978fe66af2 100644 --- a/test/request_test.rb +++ b/test/request_test.rb @@ -17,6 +17,15 @@ class RequestTest < Minitest::Test assert_equal 'bar', request.params['foo'] end + it 'raises Sinatra::BadRequest when multipart/form-data request has no content' do + request = Sinatra::Request.new( + 'REQUEST_METHOD' => 'POST', + 'CONTENT_TYPE' => 'multipart/form-data; boundary=dummy', + 'rack.input' => StringIO.new('') + ) + assert_raises(Sinatra::BadRequest) { request.params } + end + it 'is secure when the url scheme is https' do request = Sinatra::Request.new('rack.url_scheme' => 'https') assert request.secure? From c29749df69a2858f918b3d7e1042798def312baf Mon Sep 17 00:00:00 2001 From: tamazon <35480652+tamazon@users.noreply.github.com> Date: Tue, 1 Feb 2022 12:59:49 +0900 Subject: [PATCH 2/2] lock rack version to 2.0 for now --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7b289f0eda..7e94f47e58 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ source 'https://rubygems.org' unless ENV['QUICK'] gemspec gem 'rake' -gem 'rack', git: 'https://github.com/rack/rack.git' +gem 'rack', '~> 2.0' gem 'rack-test', '>= 0.6.2' gem "minitest", "~> 5.0" gem 'yard'