Bug #15834
Mutating the result of SortedSet.to_a mutates the original set, potentially violating the set's guarantees
Description
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
History
Updated by marcandre (Marc-Andre Lafortune) 7 months ago
- Assignee set to knu (Akinori MUSHA)
Updated by jeremyevans0 (Jeremy Evans) about 1 month ago
Attached is a patch with a test for fixing this.