From 294fc4f343ff1b9b0111b87a6b27b2f7a9e93087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joonas=20Kylm=C3=A4l=C3=A4?= Date: Tue, 27 Apr 2021 10:29:21 +0300 Subject: [PATCH] Bug 28230: Store C4::Message->{metadata} as Perl string always When loading C4::Message->{metadata} we load it as perl string in all other cases, see e.g. the subroutine find_last_message(). In this one case we incorrectly populate the C4::Message->{metadata} as an UTF-8 octet instead of a Perl string. This causes a problem later on because encode_utf8 later on in the line: YAML::XS::Load(Encode::encode_utf8($self->{metadata})); excepts a perl string and not a UTF-8 octet (please refer to the functions perldoc). This breaks the encoding and causes an internal server error: To test the error is gone: 1. Create biblio with "AE" (bugzilla doesn't let me write the real letter here, see it in the bugzilla comments) in title 2. Enable RenewalSendNotice 3. Enable "Item checkout and renewal" message preference for patron 4. Checkout an item from biblio "AE" to patron 5. Try to renew the patron's loan and notice the renewal fails 6. Apply patch and restart plack 7. Notice renewal works now and message h's the AE letter displayed correctly Signed-off-by: Tomas Cohen Arazi --- C4/Message.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/C4/Message.pm b/C4/Message.pm index 659ff96aeb2..e10e3c594b4 100644 --- a/C4/Message.pm +++ b/C4/Message.pm @@ -166,7 +166,7 @@ sub enqueue { my $body = join('', map { $format->($_) } @{$metadata->{body}}); $letter->{content} = $metadata->{header} . $body . $metadata->{footer}; - $letter->{metadata} = Dump($metadata); + $letter->{metadata} = Encode::decode_utf8(Dump($metadata)); C4::Letters::EnqueueLetter({ letter => $letter, borrowernumber => $borrower->{borrowernumber}, @@ -279,7 +279,7 @@ sub metadata { $data->{header} ||= ''; $data->{body} ||= []; $data->{footer} ||= ''; - $self->{metadata} = Dump($data); + $self->{metadata} = Encode::decode_utf8(Dump($data)); $self->content($self->render_metadata); return $data; } else { -- 2.31.1