Project

General

Profile

Bug #15834

Mutating the result of SortedSet.to_a mutates the original set, potentially violating the set's guarantees

Added by viko (Viko Viko) 6 months ago. Updated 6 months ago.

Status:
Open
Priority:
Normal
Target version:
-
ruby -v:
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
[ruby-core:92578]

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.

History

Updated by marcandre (Marc-Andre Lafortune) 6 months ago

  • Assignee set to knu (Akinori MUSHA)

Also available in: Atom PDF