Bug 16678: updatedatabase.pl 3.23.00.006 DB upgrade crashes if subscription_numberpat...
authorJacek Ablewicz <abl@biblos.pk.edu.pl>
Wed, 8 Jun 2016 08:46:18 +0000 (10:46 +0200)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 10 Jun 2016 16:39:26 +0000 (16:39 +0000)
It seems that if subscription_numberpatterns.numberingmethod contains parentheses, updatedatabase.pl crashes when running the 3.23.00.006 DB upgrade snippet, with the following error:

[Mon Jun 6 09:06:54 2016] updatedatabase.pl: Unmatched ( in regex; marked by <-- HERE in m/ ( <-- HERE / at /home/koha/kohaclone/installer/data/mysql/updatedatabase.pl line 11498.

Steps to reproduce:
1/ Have a Koha DB version<3.23.00.006
2/ Create a subscription numbering with parentheses in it:
   ie "Vol. (Month, Year)" with pattern
       Vol. {X} ({Y}, {Z})
3/ Add some serials using that numbering method so that serialseq is filled in DB:
   ie  "Vol. 16 (February, 2015)"
4/ Run the updatedatabase.pl script either from the cli or just start the webinstaller
5/ The error is produced

To test:
1/ apply patch
2/ try to reproduce this issue once again, should be fixed now
3/ have a look at the code, make sure the changes are consistent

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Note: I have not tested the patch, but the diff looks good.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

installer/data/mysql/updatedatabase.pl

index 657ba4e..e78fff3 100755 (executable)
@@ -11495,7 +11495,10 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
             ## We cannot split on multiple values at once,
             ## so let's replace each of those values with __SPLIT__
             if (@splits) {
-                map( $serialseq =~ s/$_/__SPLIT__/, @splits );
+                for my $split_item (@splits) {
+                    my $quoted_split = quotemeta($split_item);
+                    $serialseq =~ s/$quoted_split/__SPLIT__/;
+                }
                 (
                     undef,
                     $enumeration_data{ $indexes[0] // q{} },