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")