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)
committerJulian Maurice <julian.maurice@biblibre.com>
Wed, 24 Aug 2016 10:30:18 +0000 (12:30 +0200)
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>
(cherry picked from commit 9237fe676336f5908a9acc26a3b70b70d25602ae)
Signed-off-by: Frédéric Demians <f.demians@tamil.fr>
(cherry picked from commit d9def60267c1eb8aaacf4958de3bbddbace27621)
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>

cataloguing/additem.pl

index b3474f6..b896b0b 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: '$@'";
         }
     }
 }