Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Remove duplicate test and fix a typo in the test | Prathamesh Sonpatki | 2016-07-12 | 1 | -1/+1 |
| | | | | | - Tests for dup'ing params was separately added in a separate file in https://github.com/rails/rails/pull/25735. | ||||
* | Trust `Object#dup` in `ActionController::Parameters`, using ↵ | Tim Rogers | 2016-07-08 | 1 | -1/+19 |
| | | | | | | `#initialize_copy` to manually duplicate the underlying parameters hash It looks like `ActionController::Parameters#dup` is leftover from when the class inherited from `Hash`. We can just trust `#dup`, which already copies the `@permitted` instance variable (confirmed by tests). We still define a `#initialize_copy` to make `@parameters` a copy that can be mutated without affecting the original instance. | ||||
* | Changes to a dupped `ActionController::Parameters` mutate the original | Tim Rogers | 2016-07-07 | 1 | -0/+25 |
When `ActionController::Parameters` is duplicated with `#dup`, it doesn't create a duplicate of the instance variables (e.g. `@parameters`) but rather maintains the reference (see <http://ruby-doc.org/core-2.3.1/Object.html>). Given that the parameters object is often manipulated as if it were a hash (e.g. with `#delete` and similar methods), this leads to unexpected behaviour, like the following: ``` params = ActionController::Parameters.new(foo: "bar") duplicated_params = params.dup duplicated_params.delete(:foo) params == duplicated_params ``` This fixes the bug by defining a private `#initialize_copy` method, used internally by `#dup`, which makes a copy of `@parameters`. |