From ee90cff97005759a1295d23bbbf018f1b5040c6d Mon Sep 17 00:00:00 2001
From: emlam <emily.lamancusa@montgomerycountymd.gov>
Date: Thu, 27 Jul 2023 16:36:34 +0000
Subject: [PATCH] Bug 34435: Remove side effect from get_password_expiry_date

If get_password_expiry_date is passed a DateTime object
as a parameter, it modifies and returns the original
object. This can create possible side effects.

This patch modifies get_password_expiry_date to clone the
DateTime object that it receives as a parameter and
return the modified clone, so that object references can
be passed in safely.

To test:
prove t/db_dependent/Koha/Patron/Category.t

Signed-off-by: Sam Lau <samalau@gmail.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
---
 Koha/Patron/Category.pm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Koha/Patron/Category.pm b/Koha/Patron/Category.pm
index 335367b825d..e24c8d6e79c 100644
--- a/Koha/Patron/Category.pm
+++ b/Koha/Patron/Category.pm
@@ -126,7 +126,7 @@ sub get_password_expiry_date {
     my ($self, $date ) = @_;
     if ( $self->password_expiry_days ) {
         $date ||= dt_from_string;
-        $date = dt_from_string( $date ) unless ref $date;
+        $date = ref $date ? $date->clone() : dt_from_string( $date );
         return $date->add( days => $self->password_expiry_days )->ymd;
     } else {
         return;
-- 
2.25.1