diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-04 10:54:46 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-04 10:54:46 +0900 |
| commit | b8ab6af39d092fab099932877e2eb0f9676bfce6 (patch) | |
| tree | 8404fa98b894b20658e4dff68abaf84e65934548 /mrblib | |
| parent | 28ab1062925b99118c0aa307e2c7d2a23fc0fc29 (diff) | |
| download | mruby-b8ab6af39d092fab099932877e2eb0f9676bfce6.tar.gz mruby-b8ab6af39d092fab099932877e2eb0f9676bfce6.zip | |
protect NoMethodError from calling to_hash in ==/eql?; close #2002
Diffstat (limited to 'mrblib')
| -rw-r--r-- | mrblib/hash.rb | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/mrblib/hash.rb b/mrblib/hash.rb index 1f2358a52..978fb367b 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -12,7 +12,11 @@ class Hash # ISO 15.2.13.4.1 def == (hash) return true if self.equal?(hash) - hash = hash.to_hash + begin + hash = hash.to_hash + rescue NoMethodError + return false + end return false if self.size != hash.size self.each do |k,v| return false unless hash.key?(k) @@ -28,7 +32,11 @@ class Hash # ISO 15.2.13.4.32 (x) def eql?(hash) return true if self.equal?(hash) - hash = hash.to_hash + begin + hash = hash.to_hash + rescue NoMethodError + return false + end return false if self.size != hash.size self.each do |k,v| return false unless hash.key?(k) |
