From 8c4d6a04f896be4a2ace6046098de71a0ac41ec2 Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Tue, 31 Mar 2020 17:39:02 -0400 Subject: [PATCH] Redis cache store: fix expanding empty keys with no namespace --- activesupport/lib/active_support/cache/redis_cache_store.rb | 4 ++-- activesupport/test/cache/behaviors/cache_store_behavior.rb | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/activesupport/lib/active_support/cache/redis_cache_store.rb b/activesupport/lib/active_support/cache/redis_cache_store.rb index 58ccdc6043..a5b1e370c2 100644 --- a/activesupport/lib/active_support/cache/redis_cache_store.rb +++ b/activesupport/lib/active_support/cache/redis_cache_store.rb @@ -444,11 +444,11 @@ module ActiveSupport # Truncate keys that exceed 1kB. def normalize_key(key, options) - truncate_key super.b + truncate_key super&.b end def truncate_key(key) - if key.bytesize > max_key_bytesize + if key && key.bytesize > max_key_bytesize suffix = ":sha2:#{::Digest::SHA2.hexdigest(key)}" truncate_at = max_key_bytesize - suffix.bytesize "#{key.byteslice(0, truncate_at)}#{suffix}" diff --git a/activesupport/test/cache/behaviors/cache_store_behavior.rb b/activesupport/test/cache/behaviors/cache_store_behavior.rb index 07b1d28324..9f40b0cc34 100644 --- a/activesupport/test/cache/behaviors/cache_store_behavior.rb +++ b/activesupport/test/cache/behaviors/cache_store_behavior.rb @@ -110,6 +110,12 @@ module CacheStoreBehavior end end + def test_read_multi_with_empty_keys_and_a_logger_and_no_namespace + @cache.options[:namespace] = nil + @cache.logger = ActiveSupport::Logger.new(nil) + assert_equal({}, @cache.read_multi) + end + def test_fetch_multi @cache.write("foo", "bar") @cache.write("fud", "biz")