From 70d64169ae03eff911028be80b7f00bbb5784a67 Mon Sep 17 00:00:00 2001 From: Blake Stoddard Date: Mon, 22 Apr 2019 09:59:53 -0400 Subject: ActionCable: don't allowlist keys passed to the Redis initializer Support all Redis features without needing to maintain a list of valid options that must stay in sync with the upstream client library. --- actioncable/lib/action_cable/subscription_adapter/redis.rb | 4 +++- actioncable/test/subscription_adapter/redis_test.rb | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/actioncable/lib/action_cable/subscription_adapter/redis.rb b/actioncable/lib/action_cable/subscription_adapter/redis.rb index ad8fa52760..b4a9385c87 100644 --- a/actioncable/lib/action_cable/subscription_adapter/redis.rb +++ b/actioncable/lib/action_cable/subscription_adapter/redis.rb @@ -5,6 +5,8 @@ require "thread" gem "redis", ">= 3", "< 5" require "redis" +require "active_support/core_ext/hash/except" + module ActionCable module SubscriptionAdapter class Redis < Base # :nodoc: @@ -14,7 +16,7 @@ module ActionCable # This is needed, for example, when using Makara proxies for distributed Redis. cattr_accessor :redis_connector, default: ->(config) do config[:id] ||= "ActionCable-PID-#{$$}" - ::Redis.new(config.slice(:url, :host, :port, :db, :password, :id)) + ::Redis.new(config.except(:adapter, :channel_prefix)) end def initialize(*) diff --git a/actioncable/test/subscription_adapter/redis_test.rb b/actioncable/test/subscription_adapter/redis_test.rb index 35840a4036..d4eb89719f 100644 --- a/actioncable/test/subscription_adapter/redis_test.rb +++ b/actioncable/test/subscription_adapter/redis_test.rb @@ -34,11 +34,11 @@ class RedisAdapterTest::AlternateConfiguration < RedisAdapterTest end class RedisAdapterTest::Connector < ActionCable::TestCase - test "slices url, host, port, db, password and id from config" do + test "excludes adapter and channel prefix" do config = { url: 1, host: 2, port: 3, db: 4, password: 5, id: "Some custom ID" } assert_called_with ::Redis, :new, [ config ] do - connect config.merge(other: "unrelated", stuff: "here") + connect config.merge(adapter: "redis", channel_prefix: "custom") end end -- cgit v1.2.3