avoid FrozenError when params contains frozen value
The error can be fixed by using dupped values. The original code for testing is implemented by @programmarchy in #1479 Fixes #1478 Closes #1479
This commit is contained in:
parent
5d3099ee3b
commit
c686a10be6
|
@ -1089,7 +1089,7 @@ module Sinatra
|
|||
|
||||
# Dispatch a request with error handling.
|
||||
def dispatch!
|
||||
force_encoding(@params.merge!(@request.params))
|
||||
@params.merge!(@request.params).each { |key, val| @params[key] = force_encoding(val.dup) }
|
||||
|
||||
invoke do
|
||||
static! if settings.static? && (request.get? || request.head?)
|
||||
|
|
|
@ -65,4 +65,17 @@ class MiddlewareTest < Minitest::Test
|
|||
assert_equal "/FOO", body
|
||||
assert_equal "UpcaseMiddleware", response['X-Tests']
|
||||
end
|
||||
|
||||
class FreezeMiddleware < MockMiddleware
|
||||
def call(env)
|
||||
req = Rack::Request.new(env)
|
||||
req.update_param('bar', 'baz'.freeze)
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
it "works when middleware adds a frozen param" do
|
||||
@app.use FreezeMiddleware
|
||||
get '/Foo'
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue