зеркало из https://github.com/github/ruby.git
hash.c: fix segv in Hash#replace
* hash.c (rb_hash_replace): fix segv on `{}.replace({})` introduced in r44060 [Bug #9230] [ruby-core:58991] * test/ruby/test_hash.rb: regression test for above git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5dc77048a3
Коммит
a111923062
|
@ -1,3 +1,9 @@
|
|||
Mon Dec 9 18:50:43 2013 Aman Gupta <ruby@tmm1.net>
|
||||
|
||||
* hash.c (rb_hash_replace): fix segv on `{}.replace({})` introduced
|
||||
in r44060 [Bug #9230] [ruby-core:58991]
|
||||
* test/ruby/test_hash.rb: regression test for above
|
||||
|
||||
Mon Dec 9 18:10:10 2013 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* vm.c (vm_stat): renamed from ruby_vm_stat.
|
||||
|
|
2
hash.c
2
hash.c
|
@ -1414,7 +1414,7 @@ rb_hash_replace(VALUE hash, VALUE hash2)
|
|||
table2 = RHASH(hash2)->ntbl;
|
||||
|
||||
rb_hash_clear(hash);
|
||||
hash_tbl(hash)->type = table2->type;
|
||||
if (table2) hash_tbl(hash)->type = table2->type;
|
||||
rb_hash_foreach(hash2, replace_i, hash);
|
||||
|
||||
return hash;
|
||||
|
|
|
@ -592,6 +592,16 @@ class TestHash < Test::Unit::TestCase
|
|||
assert_nil(h[2])
|
||||
end
|
||||
|
||||
def test_replace_bug9230
|
||||
h = @cls[]
|
||||
h.replace(@cls[])
|
||||
assert_empty h
|
||||
|
||||
h = @cls[]
|
||||
h.replace(@cls[].compare_by_identity)
|
||||
assert_predicate(h, :compare_by_identity?)
|
||||
end
|
||||
|
||||
def test_shift
|
||||
h = @h.dup
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче