According to the docs, a 400 http status code would be more suitable.
Steps to reproduce:
# hi.rb
require 'sinatra'
get '/hi' do
"Hello World!"
end
$ gem install sinatra
$ ruby hi.rb
== Sinatra has taken the stage ...
>> Listening on 0.0.0.0:4567
On a new terminal:
$ curl "localhost:4567/hi?query=&query\[\]"
Or on the browser: http://localhost:4567/hi?query=&query[]
Stacktrace:
Rack::Utils::ParameterTypeError: expected Array (got String) for param `query'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/utils.rb:149:in `normalize_params'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/utils.rb:122:in `block in parse_nested_query'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/utils.rb:119:in `each'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/utils.rb:119:in `parse_nested_query'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/request.rb:371:in `parse_query'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/request.rb:191:in `GET'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/request.rb:230:in `params'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:901:in `call!'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:894:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/logger.rb:15:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:218:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:211:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/head.rb:13:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:21:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:181:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:2021:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in `block in call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:1795:in `synchronize'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in `call'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/thin-1.6.3/lib/thin/connection.rb:86:in `block in pre_process'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/thin-1.6.3/lib/thin/connection.rb:84:in `catch'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/thin-1.6.3/lib/thin/connection.rb:84:in `pre_process'
/Users/bmsatierf/.rvm/gems/ruby-2.2.3@sinatra/gems/eventmachine-1.0.4/lib/eventmachine.rb:1046:in `call'
According to the docs, a 400 http status code would be more suitable.
Steps to reproduce:
On a new terminal:
Or on the browser: http://localhost:4567/hi?query=&query[]
Stacktrace: