diff options
author | Sam Davies <seivadmas@gmail.com> | 2016-03-03 12:25:28 -0300 |
---|---|---|
committer | Sam Davies <seivadmas@gmail.com> | 2016-03-03 21:23:19 -0300 |
commit | fea7c9fed65b9dd305562483c1cfd80104d521b5 (patch) | |
tree | 63ed6da70a1ea9a833fc9b6217a0ba31db92ee77 /actionpack/test | |
parent | 3009fa1e089ff1133ce95c767063ca9f9cdb130f (diff) | |
download | rails-fea7c9fed65b9dd305562483c1cfd80104d521b5.tar.gz rails-fea7c9fed65b9dd305562483c1cfd80104d521b5.tar.bz2 rails-fea7c9fed65b9dd305562483c1cfd80104d521b5.zip |
Do not destructively mutate passed options hash in route definitions
- Fixes #24030
An example scope might be specified as such:
```ruby
HTML = { constraints: { format: :html } }.freeze
scope HTML do
get 'x'
end
```
This currently raises an error because the mapper attempts to
destructively modify the passed options hash. This is dangerous because
this options hash might even be shared with other scopes.
We should instead always instantiate a new object instead of modifying
the passed options.
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/dispatch/mapper_test.rb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/mapper_test.rb b/actionpack/test/dispatch/mapper_test.rb index df27e41997..69098326b9 100644 --- a/actionpack/test/dispatch/mapper_test.rb +++ b/actionpack/test/dispatch/mapper_test.rb @@ -178,6 +178,19 @@ module ActionDispatch mapper.mount as: "exciting" end end + + def test_scope_does_not_destructively_mutate_default_options + fakeset = FakeSet.new + mapper = Mapper.new fakeset + + frozen = { foo: :bar }.freeze + + assert_nothing_raised do + mapper.scope(defaults: frozen) do + # pass + end + end + end end end end |