diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | array.c | 4 | ||||
-rw-r--r-- | test/ruby/test_array.rb | 5 | ||||
-rw-r--r-- | version.h | 2 |
4 files changed, 15 insertions, 2 deletions
@@ -1,3 +1,9 @@ +Wed Feb 5 17:55:28 2014 Aman Gupta <ruby@tmm1.net> + + * array.c (ary_add_hash): Fix consistency issue between Array#uniq and + Array#uniq! [Bug #9340] [ruby-core:59457] + * test/ruby/test_array.rb (class TestArray): regression test for above. + Wed Feb 5 11:48:42 2014 Charlie Somerville <charliesome@ruby-lang.org> * struct.c (rb_struct_set): return assigned value from setter method @@ -3904,7 +3904,9 @@ ary_add_hash(VALUE hash, VALUE ary) for (i=0; i<RARRAY_LEN(ary); i++) { VALUE elt = RARRAY_AREF(ary, i); - rb_hash_aset(hash, elt, elt); + if (rb_hash_lookup2(hash, elt, Qundef) == Qundef) { + rb_hash_aset(hash, elt, elt); + } } return hash; } diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index b648c404ed..6ff304acb2 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -1524,6 +1524,11 @@ class TestArray < Test::Unit::TestCase assert(a.none?(&:frozen?)) assert_equal(%w(a), b) assert(b.none?(&:frozen?)) + + bug9340 = "[ruby-core:59457]" + ary = [bug9340, bug9340.dup, bug9340.dup] + assert_equal 1, ary.uniq.size + assert_same bug9340, ary.uniq[0] end def test_uniq_with_block @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.1" #define RUBY_RELEASE_DATE "2014-02-05" -#define RUBY_PATCHLEVEL 17 +#define RUBY_PATCHLEVEL 18 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 2 |