From cc3b2d05905b8c6c7000a0252e277c151c0eeae6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc=20V=C3=A9ron?= Date: Mon, 28 Dec 2015 10:29:17 +0100 Subject: [PATCH] Bug 15429 - sub _parseletter should not change referenced values MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In C4/Letters.pm, sub _parseletter changes values that are passed by reference. E.g. patron's expiry date can change from iso format to syspref format, leading to strange behaviour in the calling routines (see Bug 15423). This patch makes sub _parseletter work on a copy of the referenced values. (Submitted to get feedback - is this the way to go?) Signed-off-by: Frédéric Demians Good solution to real time bomb. Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall (cherry picked from commit 002a2dcb1f1faed12a24fd820dc5fdaad60f3512) Signed-off-by: Julian Maurice --- C4/Letters.pm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index bc60bc38ab..d07d33f997 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -790,14 +790,18 @@ sub _parseletter_sth { parameters : - $letter : a hash to letter fields (title & content useful) - $table : the Koha table to parse. - - $values : table record hashref + - $values_in : table record hashref parse all fields from a table, and replace values in title & content with the appropriate value (not exported sub, used only internally) =cut sub _parseletter { - my ( $letter, $table, $values ) = @_; + my ( $letter, $table, $values_in ) = @_; + + # Work on a local copy of $values_in (passed by reference) to avoid side effects + # in callers ( by changing / formatting values ) + my $values = { %$values_in }; if ( $table eq 'borrowers' && $values->{'dateexpiry'} ){ $values->{'dateexpiry'} = format_sqldatetime( $values->{'dateexpiry'} ); -- 2.20.1