Issue #15834 has been updated by jeremyevans0 (Jeremy Evans).
File sorted-set-to_a-mutate-15834 added
Attached is a patch with a test for fixing this.
----------------------------------------
Bug #15834: Mutating the result of SortedSet.to_a mutates the original set, potentially violating the set's guarantees
https://bugs.ruby-lang.org/issues/15834#change-82356
* Author: viko (Viko Viko)
* Status: Open
* Priority: Normal
* Assignee: knu (Akinori MUSHA)
* Target version:
* ruby -v: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
``` ruby
require 'set'
set = SortedSet[1, 2, 3]
set.to_a << -1
set.to_a << 3
set.each do |x|
puts x
end
puts
set.add -2
set.each do |x|
puts x
end
```
```
1
2
3
-1
3
-2
1
2
3
```
As can be seen, this breaks SortedSet's guarantee of ordering *and* Set's guarantee of uniqueness, besides being strange behaviour. Mutating the set normally undoes the changes. This bug only seems to exist for SortedSet, and not for Set itself. Workaround: `dup`.
---Files--------------------------------
sorted-set-to_a-mutate-15834 (1.02 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>