mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix #10932. Treat "" and "::" as invalid on constantize
This commit is contained in:
parent
b3bc3aa5cb
commit
7fd36f307a
2 changed files with 10 additions and 5 deletions
|
@ -219,7 +219,12 @@ module ActiveSupport
|
|||
# unknown.
|
||||
def constantize(camel_cased_word)
|
||||
names = camel_cased_word.split('::')
|
||||
names.shift if names.empty? || names.first.empty?
|
||||
|
||||
# Trigger a builtin NameError exception including the ill-formed constant in the message.
|
||||
Object.const_get(camel_cased_word) if names.empty?
|
||||
|
||||
# Remove the first blank element in case of '::ClassName' notation.
|
||||
names.shift if names.size > 1 && names.first.empty?
|
||||
|
||||
names.inject(Object) do |constant, name|
|
||||
if constant == Object
|
||||
|
|
|
@ -34,8 +34,6 @@ module ConstantizeTestCases
|
|||
assert_equal Case::Dice, yield("Object::Case::Dice")
|
||||
assert_equal ConstantizeTestCases, yield("ConstantizeTestCases")
|
||||
assert_equal ConstantizeTestCases, yield("::ConstantizeTestCases")
|
||||
assert_equal Object, yield("")
|
||||
assert_equal Object, yield("::")
|
||||
assert_raises(NameError) { yield("UnknownClass") }
|
||||
assert_raises(NameError) { yield("UnknownClass::Ace") }
|
||||
assert_raises(NameError) { yield("UnknownClass::Ace::Base") }
|
||||
|
@ -45,6 +43,8 @@ module ConstantizeTestCases
|
|||
assert_raises(NameError) { yield("Ace::Base::ConstantizeTestCases") }
|
||||
assert_raises(NameError) { yield("Ace::Gas::Base") }
|
||||
assert_raises(NameError) { yield("Ace::Gas::ConstantizeTestCases") }
|
||||
assert_raises(NameError) { yield("") }
|
||||
assert_raises(NameError) { yield("::") }
|
||||
end
|
||||
|
||||
def run_safe_constantize_tests_on
|
||||
|
@ -58,8 +58,8 @@ module ConstantizeTestCases
|
|||
assert_equal Case::Dice, yield("Object::Case::Dice")
|
||||
assert_equal ConstantizeTestCases, yield("ConstantizeTestCases")
|
||||
assert_equal ConstantizeTestCases, yield("::ConstantizeTestCases")
|
||||
assert_equal Object, yield("")
|
||||
assert_equal Object, yield("::")
|
||||
assert_nil yield("")
|
||||
assert_nil yield("::")
|
||||
assert_nil yield("UnknownClass")
|
||||
assert_nil yield("UnknownClass::Ace")
|
||||
assert_nil yield("UnknownClass::Ace::Base")
|
||||
|
|
Loading…
Reference in a new issue