Bug 14844: Corrupted storable string. When adding/editing an Item, cookie LastCreated...
authorOlli-Antti Kivilahti <olli-antti.kivilahti@jns.fi>
Thu, 17 Sep 2015 10:23:49 +0000 (13:23 +0300)
committerKyle M Hall <kyle@bywatersolutions.com>
Wed, 17 Aug 2016 18:00:31 +0000 (18:00 +0000)
No idea how to replicate this issue but we have been getting several reports
about the following error:

Software error:

Corrupted storable string (binary v2.9) at /usr/lib/perl/5.18/Storable.pm line
417, at /home/koha/kohaclone/cataloguing/additem.pl line 375.

TEST PLAN:
1. Add or modify an Item.
2. No observed changes.
?. We don't know what causes this but we know that add/modify Item occasionally
   crashes due to failure of a cookie thawing.

This patch prevents the whole program from dying, because this error is not
critical enough to warrant dying.
Also there is no centralized mechanism in Koha for showing messages to the
user, so there is no easy and convenient way to warn the user that the:
'LastCreatedItem'-cookie or the systempreference 'PrefillItem' is
malfunctioning.

So we instead just warn to the server logs with the malfunctioning cookie in
hopes of nailing down what causes the issues.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
cataloguing/additem.pl

index 28fd247..1984a05 100755 (executable)
@@ -417,9 +417,15 @@ if ($prefillitem) {
     my $lastitemcookie = $input->cookie('LastCreatedItem');
     if ($lastitemcookie) {
         $lastitemcookie = uri_unescape($lastitemcookie);
-        if ( thaw($lastitemcookie) ) {
-            $cookieitemrecord = thaw($lastitemcookie) ;
-            $cookieitemrecord = removeFieldsForPrefill($cookieitemrecord);
+        eval {
+            if ( thaw($lastitemcookie) ) {
+                $cookieitemrecord = thaw($lastitemcookie);
+                $cookieitemrecord = removeFieldsForPrefill($cookieitemrecord);
+            }
+        };
+        if ($@) {
+            $lastitemcookie = 'undef' unless $lastitemcookie;
+            warn "Storable::thaw failed to thaw LastCreatedItem-cookie. Cookie value '$lastitemcookie'. Caught error follows: '$@'";
         }
     }
 }