diff options
author | Mike Mangino <mmangino@elevatedrails.com> | 2013-03-28 11:19:01 -0400 |
---|---|---|
committer | Mike Mangino <mmangino@elevatedrails.com> | 2013-03-28 11:19:01 -0400 |
commit | a4743960a09139c3bd4d72a8f3a72ade8f4add2f (patch) | |
tree | 086c63e4962de057b67c160da89f4cb91800f86b | |
parent | 51ba66b92df1a07390128725cd7ad7ee9be9c1bd (diff) | |
download | rails-a4743960a09139c3bd4d72a8f3a72ade8f4add2f.tar.gz rails-a4743960a09139c3bd4d72a8f3a72ade8f4add2f.tar.bz2 rails-a4743960a09139c3bd4d72a8f3a72ade8f4add2f.zip |
Raise an exception when unserialization fails due to a missing class
-rw-r--r-- | activerecord/lib/active_record/coders/yaml_column.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/coders/yaml_column_test.rb | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/coders/yaml_column.rb b/activerecord/lib/active_record/coders/yaml_column.rb index 8d22942a06..1aa82f20d6 100644 --- a/activerecord/lib/active_record/coders/yaml_column.rb +++ b/activerecord/lib/active_record/coders/yaml_column.rb @@ -33,7 +33,8 @@ module ActiveRecord obj ||= object_class.new if object_class != Object obj - rescue ArgumentError, Psych::SyntaxError + rescue ArgumentError , Psych::SyntaxError => e + raise if e.to_s =~ /undefined class/ yaml end end diff --git a/activerecord/test/cases/coders/yaml_column_test.rb b/activerecord/test/cases/coders/yaml_column_test.rb index b874adc081..45e986c7b6 100644 --- a/activerecord/test/cases/coders/yaml_column_test.rb +++ b/activerecord/test/cases/coders/yaml_column_test.rb @@ -48,6 +48,14 @@ module ActiveRecord bad_yaml = '--- {' assert_equal bad_yaml, coder.load(bad_yaml) end + + def test_load_doesnt_handle_undefined_class_or_module + coder = YAMLColumn.new + missing_class_yaml = '--- !ruby/object:DoesNotExistAndShouldntEver {}\n' + assert_raises(ArgumentError) do + coder.load(missing_class_yaml) + end + end end end end |