Bug 16009: fix GetMember() search on NULL/undef values
authorGalen Charlton <gmcharlt@gmail.com>
Wed, 9 Mar 2016 01:41:33 +0000 (01:41 +0000)
committerBrendan A Gallagher <brendan@bywatersolutions.com>
Fri, 11 Mar 2016 15:23:37 +0000 (15:23 +0000)
This patch fixes a bug whereby GetMember(searchfield => undef)
(i.e., searching for patron records where 'searchfield' is NULL)
would crash.

This fixes a regression introduced by bug 15344 that in turn
exposed a long-standing bug in GetMember().

To test:

[1] Import some offline circulation transactions that include at
    least one return.
[2] Attempt to view the list of pending transactions; a crash
    will occur.
[3] Apply the patch and view the list of pending transactions again;
    this time, it should work.

Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com>
C4/Members.pm
t/db_dependent/Members.t

index cc438f0..884ee3d 100644 (file)
@@ -435,7 +435,7 @@ sub GetMember {
     }
     $debug && warn $select, " ",values %information;
     my $sth = $dbh->prepare("$select");
-    $sth->execute(map{$information{$_}} keys %information);
+    $sth->execute(@values);
     my $data = $sth->fetchall_arrayref({});
     #FIXME interface to this routine now allows generation of a result set
     #so whole array should be returned but bowhere in the current code expects this
index 146d563..97cf9e1 100755 (executable)
@@ -17,7 +17,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 56;
+use Test::More tests => 58;
 use Test::MockModule;
 use Data::Dumper;
 use C4::Context;
@@ -409,4 +409,12 @@ sub testAgeAccessors {
     $member->{dateofbirth} = $original_dateofbirth; #It is polite to revert made changes in the unit tests.
 } #sub testAgeAccessors
 
+# regression test for bug 16009
+my $patron;
+eval {
+    my $patron = GetMember(cardnumber => undef);
+};
+is($@, '', 'Bug 16009: GetMember(cardnumber => undef) works');
+is($patron, undef, 'Bug 16009: GetMember(cardnumber => undef) returns undef');
+
 1;