|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
From 99f030934eb8341db333cb6783d0f42bfa57358f Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
From: Aaron Patterson <aaron.patterson@gmail.com>
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
Date: Wed, 30 May 2012 15:06:12 -0700
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
Subject: [PATCH] predicate builder should not recurse for determining where
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
columns. Thanks to Ben Murphy for reporting this
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
CVE-2012-2661
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
---
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
.../lib/active_record/relation/predicate_builder.rb | 6 +++---
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
activerecord/test/cases/relation/where_test.rb | 19 +++++++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
2 files changed, 22 insertions(+), 3 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
create mode 100644 activerecord/test/cases/relation/where_test.rb
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
index 505c3f4..84e88cf 100644
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
--- a/activerecord/lib/active_record/relation/predicate_builder.rb
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+++ b/activerecord/lib/active_record/relation/predicate_builder.rb
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
@@ -5,17 +5,17 @@ module ActiveRecord
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
@engine = engine
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
- def build_from_hash(attributes, default_table)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ def build_from_hash(attributes, default_table, check_column = true)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
predicates = attributes.map do |column, value|
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
table = default_table
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
if value.is_a?(Hash)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
table = Arel::Table.new(column, :engine => @engine)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
- build_from_hash(value, table)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ build_from_hash(value, table, false)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
else
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
column = column.to_s
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
- if column.include?('.')
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ if check_column && column.include?('.')
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
table_name, column = column.split('.', 2)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
table = Arel::Table.new(table_name, :engine => @engine)
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
diff --git a/activerecord/test/cases/relation/where_test.rb b/activerecord/test/cases/relation/where_test.rb
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
new file mode 100644
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
index 0000000..90c690e
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
--- /dev/null
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+++ b/activerecord/test/cases/relation/where_test.rb
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
@@ -0,0 +1,19 @@
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+require "cases/helper"
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+require 'models/post'
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+module ActiveRecord
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ class WhereTest < ActiveRecord::TestCase
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ fixtures :posts
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ def test_where_error
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ assert_raises(ActiveRecord::StatementInvalid) do
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ Post.where(:id => { 'posts.author_id' => 10 }).first
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ def test_where_with_table_name
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ post = Post.first
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ assert_equal post, Post.where(:posts => { 'id' => post.id }).first
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
+end
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
--
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
1.7.10.2
|
|
![](https://seccdn.libravatar.org/avatar/67dcb52d090d3f48b3ba686b9a50c61a39be8db5d9b8e4102b2aed8a2dc22109?s=16&d=retro) |
346541d |
|