From 45233776f594befb62caef6941e7077a071108a5 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 8 Apr 2016 12:54:44 +0100 Subject: [PATCH] Bug 16229: Add the unsafe flag to set_in_cache Could be useful later. --- Koha/Cache.pm | 4 +++- t/Cache.t | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Koha/Cache.pm b/Koha/Cache.pm index c717c5a..fd817fa 100644 --- a/Koha/Cache.pm +++ b/Koha/Cache.pm @@ -281,7 +281,9 @@ sub set_in_cache { $expiry //= $self->{timeout}; my $set_sub = $self->{ref($self->{$cache}) . "_set"}; - $value = clone $value; + # Deep copy if it's not a scalar and unsafe is not passed + $value = clone $value unless ref($value) and defined $options and $options->{unsafe}; + # Set in L1 cache $L1_cache{ $key } = $value; diff --git a/t/Cache.t b/t/Cache.t index 8fa96e6..5a5c248 100644 --- a/t/Cache.t +++ b/t/Cache.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 39; +use Test::More tests => 40; my $destructorcount = 0; @@ -196,8 +196,15 @@ SKIP: { $item_from_cache = $cache->get_from_cache('test_deep_copy_hash'); %$item_from_cache = ( another => 'hashref' ); is_deeply( $cache->get_from_cache('test_deep_copy_hash'), { a => 'hashref' }, 'A hash will be deep copied'); + %item = ( a_modified => 'hashref' ); is_deeply( $cache->get_from_cache('test_deep_copy_hash'), { a => 'hashref' }, 'A hash will be deep copied when set in cache'); + + %item = ( a => 'hashref' ); + $cache->set_in_cache('test_deep_copy_hash', \%item, { unsafe => 1}); + %item = ( a_modified => 'hashref' ); + is_deeply( $cache->get_from_cache('test_deep_copy_hash'), { a_modified => 'hashref' }, 'A hash will not be deep copied when set in cache if the unsafe flag is set'); + $item_from_cache = $cache->get_from_cache('test_deep_copy_hash', { unsafe => 1}); %$item_from_cache = ( another => 'hashref' ); is_deeply( $cache->get_from_cache('test_deep_copy_hash'), { another => 'hashref' }, 'A hash will not be deep copied if the unsafe flag is set'); -- 2.7.0