Skip to content

Commit e772e9e

Browse files
committed
Regex escape table names and quoted table names used in regex
1 parent 2e34511 commit e772e9e

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

activerecord/lib/active_record/associations/alias_tracker.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,18 @@ def self.create(pool, initial_table, joins, aliases = nil)
2626
end
2727

2828
def self.initial_count_for(connection, name, table_joins)
29-
quoted_name = nil
29+
quoted_name_escaped = nil
30+
name_escaped = nil
3031

3132
counts = table_joins.map do |join|
3233
if join.is_a?(Arel::Nodes::StringJoin)
33-
# quoted_name should be case ignored as some database adapters (Oracle) return quoted name in uppercase
34-
quoted_name ||= connection.quote_table_name(name)
34+
# quoted_name_escaped should be case ignored as some database adapters (Oracle) return quoted name in uppercase
35+
quoted_name_escaped ||= Regexp.escape(connection.quote_table_name(name))
36+
name_escaped ||= Regexp.escape(name)
3537

3638
# Table names + table aliases
3739
join.left.scan(
38-
/JOIN(?:\s+\w+)?\s+(?:\S+\s+)?(?:#{quoted_name}|#{name})\sON/i
40+
/JOIN(?:\s+\w+)?\s+(?:\S+\s+)?(?:#{quoted_name_escaped}|#{name_escaped})\sON/i
3941
).size
4042
elsif join.is_a?(Arel::Nodes::Join)
4143
join.left.name == name ? 1 : 0

0 commit comments

Comments
 (0)