summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-05 11:29:40 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-05 11:29:40 +0000
commitc0bdb2511d898cb875e75dc1e7f774112e5341f9 (patch)
tree69ca460e3c0029665ccec67beab5323399cdac64
parentbda2300c4d50a73bcda66f886c362e7f4da82da5 (diff)
merge revision(s) 44512: [Backport #9340]
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@44839 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--array.c4
-rw-r--r--test/ruby/test_array.rb5
-rw-r--r--version.h2
4 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index d8aae5a043..01018edd17 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/array.c b/array.c
index 45713c55b0..ff77a3ed94 100644
--- a/array.c
+++ b/array.c
@@ -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
diff --git a/version.h b/version.h
index a3977f41fc..7e623c538d 100644
--- a/version.h
+++ b/version.h
@@ -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