From 61683dd59c16ab8f919d77bd7b65aafb8f46fc85 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Thu, 21 Jun 2018 11:15:23 +0300 Subject: [PATCH] Bug 20971: additem Corrupted storable string Sometimes additem.pl will complain about "Storable::thaw failed to thaw LastCreatedItem-cookie.", see bug 14844. Now, actually fix the bug. The bug is caused by trying to URI (un)escape MARC::Record, binary data. We'll use a base64 url-safe version instead. Signed-off-by: Pasi Kallinen Signed-off-by: James O'Keeffe Signed-off-by: Katrin Fischer --- cataloguing/additem.pl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index b8face6d22..b42d3d3765 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -44,6 +44,7 @@ use C4::Members; use MARC::File::XML; use URI::Escape; +use MIME::Base64 qw(decode_base64url encode_base64url); our $dbh = C4::Context->dbh; @@ -467,7 +468,7 @@ my $cookieitemrecord; if ($prefillitem) { my $lastitemcookie = $input->cookie('LastCreatedItem'); if ($lastitemcookie) { - $lastitemcookie = uri_unescape($lastitemcookie); + $lastitemcookie = decode_base64url($lastitemcookie); eval { if ( thaw($lastitemcookie) ) { $cookieitemrecord = thaw($lastitemcookie); @@ -476,7 +477,7 @@ if ($prefillitem) { }; if ($@) { $lastitemcookie = 'undef' unless $lastitemcookie; - warn "Storable::thaw failed to thaw LastCreatedItem-cookie. Cookie value '$lastitemcookie'. Caught error follows: '$@'"; + warn "Storable::thaw failed to thaw LastCreatedItem-cookie. Cookie value '".encode_base64url($lastitemcookie)."'. Caught error follows: '$@'"; } } } @@ -532,8 +533,8 @@ if ($op eq "additem") { if ($prefillitem && defined $record) { my $itemcookie = $input->cookie( -name => 'LastCreatedItem', - # We uri_escape the whole freezed structure so we're sure we won't have any encoding problems - -value => uri_escape_utf8( freeze( $record ) ), + # We encode_base64url the whole freezed structure so we're sure we won't have any encoding problems + -value => encode_base64url( freeze( $record ) ), -HttpOnly => 1, -expires => '' ); -- 2.11.0