aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Mangino <mmangino@elevatedrails.com>2013-03-28 11:19:01 -0400
committerMike Mangino <mmangino@elevatedrails.com>2013-03-28 11:19:01 -0400
commita4743960a09139c3bd4d72a8f3a72ade8f4add2f (patch)
tree086c63e4962de057b67c160da89f4cb91800f86b
parent51ba66b92df1a07390128725cd7ad7ee9be9c1bd (diff)
downloadrails-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.rb3
-rw-r--r--activerecord/test/cases/coders/yaml_column_test.rb8
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