aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-12-19 13:57:14 -0800
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-12-19 13:57:14 -0800
commitccaa3e47c4fd1e35bbd986faf1b4994fce3d68d0 (patch)
tree1b5e992df52608c53c2d4536562e497fbe236e8c
parentecde74e1b00d72113775b17ad953cc95ecac3627 (diff)
parent4a720a2cdefc1926e0bfa23b8febd71869093c59 (diff)
downloadrails-ccaa3e47c4fd1e35bbd986faf1b4994fce3d68d0.tar.gz
rails-ccaa3e47c4fd1e35bbd986faf1b4994fce3d68d0.tar.bz2
rails-ccaa3e47c4fd1e35bbd986faf1b4994fce3d68d0.zip
Merge pull request #13412 from arthurnn/quote_id_not_id
quoting: Check if id is a valid method before using it
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/quoting.rb4
-rw-r--r--activerecord/test/cases/adapters/sqlite3/quoting_test.rb7
2 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb
index 552a22d28a..75501852ed 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb
@@ -43,7 +43,9 @@ module ActiveRecord
# SQLite does not understand dates, so this method will convert a Date
# to a String.
def type_cast(value, column)
- return value.id if value.respond_to?(:quoted_id)
+ if value.respond_to?(:quoted_id) && value.respond_to?(:id)
+ return value.id
+ end
case value
when String, ActiveSupport::Multibyte::Chars
diff --git a/activerecord/test/cases/adapters/sqlite3/quoting_test.rb b/activerecord/test/cases/adapters/sqlite3/quoting_test.rb
index a7b2764fc1..ba89487838 100644
--- a/activerecord/test/cases/adapters/sqlite3/quoting_test.rb
+++ b/activerecord/test/cases/adapters/sqlite3/quoting_test.rb
@@ -95,6 +95,13 @@ module ActiveRecord
end
}.new
assert_equal 10, @conn.type_cast(quoted_id_obj, nil)
+
+ quoted_id_obj = Class.new {
+ def quoted_id
+ "'zomg'"
+ end
+ }
+ assert_raise(TypeError) { @conn.type_cast(quoted_id_obj, nil) }
end
end
end