From f5f48d9400420617fa8bee3b53075894b3a53c1c Mon Sep 17 00:00:00 2001 From: Sayed Abdelhaleem Date: Wed, 27 Jan 2016 21:17:33 +0200 Subject: protect NoMethodError from calling to_hash in replace --- mrblib/hash.rb | 1 + test/t/hash.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/mrblib/hash.rb b/mrblib/hash.rb index e3e709070..782111459 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -154,6 +154,7 @@ class Hash # # ISO 15.2.13.4.23 def replace(hash) + raise TypeError, "can't convert argument into Hash" unless hash.respond_to?(:to_hash) self.clear hash = hash.to_hash hash.each_key{|k| diff --git a/test/t/hash.rb b/test/t/hash.rb index 3196cc97a..c8d7a70ef 100644 --- a/test/t/hash.rb +++ b/test/t/hash.rb @@ -239,6 +239,10 @@ assert('Hash#replace', '15.2.13.4.23') do a = Hash.new{|h,x| x} b.replace(a) assert_equal(127, b[127]) + + assert_raise(TypeError) do + { 'abc_key' => 'abc_value' }.replace "a" + end end assert('Hash#shift', '15.2.13.4.24') do -- cgit v1.2.3