From 89fef02f1305887d97ddcf96cc4df9109ce414e2 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 6 Oct 2011 07:29:33 +0000 Subject: * 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 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 --- test/-ext-/symbol/test_inadvertent_creation.rb | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/-ext-/symbol/test_inadvertent_creation.rb (limited to 'test') diff --git a/test/-ext-/symbol/test_inadvertent_creation.rb b/test/-ext-/symbol/test_inadvertent_creation.rb new file mode 100644 index 0000000000..987cab56ef --- /dev/null +++ b/test/-ext-/symbol/test_inadvertent_creation.rb @@ -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 -- cgit v1.2.3