Skip to content

Parameter with conflicting types returns 500 status code #1058

@bmfreitas

Description

@bmfreitas

According to the docs, a 400 http status code would be more suitable.

Steps to reproduce:

$ touch hi.rb
# 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'

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions