Bug 6253 followup: explicitly check ref value for ARRAY before casting
authorIan Walls <ian.walls@bywatersolutions.com>
Wed, 19 Oct 2011 15:46:21 +0000 (11:46 -0400)
committerChris Cormack <chrisc@catalyst.net.nz>
Wed, 19 Oct 2011 20:20:20 +0000 (09:20 +1300)
in C4::SQLHelper::_Process_Operands, $operand has been modified to be cast as an array ref
if the incoming $operand is not a ref.  However, the incoming $operand could be some other
kind of ref (hashref for example), which would case the dereferencing in line 419 to fail and exit.

Adding an explicit test for whether the ref is ARRAY seems to clear up this issue.

To test, run t/db_dependent/Members.t.  Before, it fails after test 3.  After, it completes all tests.

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
C4/SQLHelper.pm

index 720dc99..285f7d2 100644 (file)
@@ -415,7 +415,7 @@ sub _Process_Operands{
        my @tmpkeys;
        my @localkeys;
 
-    $operand = [$operand] unless ref $operand;
+    $operand = [$operand] unless ref $operand eq 'ARRAY';
     foreach (@$operand) {
            push @tmpkeys, " $field = ? ";
            push @values, $_;