1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* vm_eval.c (make_no_method_execption): extract from

raise_method_missing().
* vm_eval.c (send_internal): remove inadvertent symbol creation
  from public_send.  based on a patch by Jeremy Evans <code AT
  jeremyevans.net> in [ruby-core:38576]. [Feature #5112]
* vm_insnhelper.c (vm_call_method): remove inadvertent symbol
  creation from send and __send__, too.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2011-10-06 07:29:33 +00:00
parent 60d83c5da4
commit 89fef02f13
8 changed files with 138 additions and 22 deletions

View file

@ -0,0 +1,44 @@
require 'test/unit'
require "-test-/symbol/symbol"
module Test_Symbol
class TestInadvertent < Test::Unit::TestCase
def self.noninterned_name
th = Thread.current.object_id.to_s(36)
begin
name = "#{th}.#{rand(0x1000).to_s(16)}.#{Time.now.usec}"
end while Bug::Symbol.interned?(name)
name
end
def setup
@obj = Object.new
end
Feature5112 = '[ruby-core:38576]'
def test_public_send
name = self.class.noninterned_name
e = assert_raise(NoMethodError) {@obj.public_send(name, Feature5112)}
assert_not_send([Bug::Symbol, :interned?, name])
assert_equal(name, e.name)
assert_equal([Feature5112], e.args)
end
def test_send
name = self.class.noninterned_name
e = assert_raise(NoMethodError) {@obj.send(name, Feature5112)}
assert_not_send([Bug::Symbol, :interned?, name])
assert_equal(name, e.name)
assert_equal([Feature5112], e.args)
end
def test___send__
name = self.class.noninterned_name
e = assert_raise(NoMethodError) {@obj.__send__(name, Feature5112)}
assert_not_send([Bug::Symbol, :interned?, name])
assert_equal(name, e.name)
assert_equal([Feature5112], e.args)
end
end
end