From ac112f2b5dc7e16ccde8f048be80946187a033b0 Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Wed, 6 Nov 2019 01:47:32 -0500 Subject: Avoid top-level search for nested constant reference from nil in defined? Fixes [Bug #16332] Constant access was changed to no longer allow top-level constant access through `nil`, but `defined?` wasn't changed at the same time to stay consistent. Use a separate defined type to distinguish between a constant referenced from the current lexical scope and one referenced from another namespace. --- test/ruby/test_const.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'test') diff --git a/test/ruby/test_const.rb b/test/ruby/test_const.rb index 6284434db0..1c73b66648 100644 --- a/test/ruby/test_const.rb +++ b/test/ruby/test_const.rb @@ -50,8 +50,13 @@ class TestConst < Test::Unit::TestCase def test_const_access_from_nil assert_raise(TypeError) { eval("nil::Object") } + assert_nil eval("defined?(nil::Object)") + assert_raise(TypeError) { eval("c = nil; c::Object") } + assert_nil eval("c = nil; defined?(c::Object)") + assert_raise(TypeError) { eval("sc = Class.new; sc::C = nil; sc::C::Object") } + assert_nil eval("sc = Class.new; sc::C = nil; defined?(sc::C::Object)") end def test_redefinition -- cgit v1.2.1