Bug 20971: Prevent Storable::thaw to fail on LastCreatedItem
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. Test plan: 1: Set PrefillItem to 'The new item is prefilled...' 2: Set a SubfieldsToUseWhenPrefill, 'c' for example 3: Add a new item for biblio A with 'c' set. 4: Double check 'c' value is set for next new item A. 5: search and add a new item for biblio B 6: 'c' is not set Apply patch 7: logout, login 8: repeat steps 3, 4, and 5 . 9: now 'c' is set. Signed-off-by: Pasi Kallinen <pasi.kallinen@joensuu.fi> Signed-off-by: James O'Keeffe <jamespfk@gmail.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> JD amended patch: fix commit title and add test plan Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
920d3efcdf
commit
9a7f778737
1 changed files with 5 additions and 4 deletions
|
@ -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 => ''
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue