From: Jason Stephenson Date: Mon, 8 Aug 2011 14:24:18 +0000 (-0400) Subject: Add some return-type guards in CStoreEditor.pm. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=a5e9a3c4fb7e317ba7633fa7f230d7de849ba709;p=working%2FEvergreen.git Add some return-type guards in CStoreEditor.pm. Check that return types from $self->json_query are arrayrefs before actually using the returned values in the allowed and objects_allowed methods of CStoreEditor.pm. This should prevent some crashes that I've seen when permission checks fail for some unknown reason (database timeouts?) while retrieving and paying bills. Signed-off-by: Jason Stephenson --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm index 03237caf3a..7826d29165 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm @@ -517,15 +517,15 @@ my $OBJECT_PERM_QUERY = { }; sub allowed { - my( $self, $perm, $org, $object, $hint ) = @_; - my $uid = $self->requestor->id; - $org ||= $self->requestor->ws_ou; + my( $self, $perm, $org, $object, $hint ) = @_; + my $uid = $self->requestor->id; + $org ||= $self->requestor->ws_ou; my $perms = (ref($perm) eq 'ARRAY') ? $perm : [$perm]; for $perm (@$perms) { - $self->log(I, "checking perms user=$uid, org=$org, perm=$perm"); - + $self->log(I, "checking perms user=$uid, org=$org, perm=$perm"); + if($object) { my $params; if(ref $object) { @@ -539,12 +539,14 @@ sub allowed { push(@$params, $org) if $org; $OBJECT_PERM_QUERY->{select}->{au}->[0]->{params} = $params; $OBJECT_PERM_QUERY->{where}->{id} = $uid; - return 1 if $U->is_true($self->json_query($OBJECT_PERM_QUERY)->[0]->{has_perm}); + my $r = $self->json_query($OBJECT_PERM_QUERY); + return 1 if (ref($r) eq 'ARRAY' and $U->is_true($r->[0]->{has_perm})); } else { $PERM_QUERY->{select}->{au}->[0]->{params} = [$perm, $org]; $PERM_QUERY->{where}->{id} = $uid; - return 1 if $U->is_true($self->json_query($PERM_QUERY)->[0]->{has_perm}); + my $r = $self->json_query($PERM_QUERY); + return 1 if (ref($r) eq 'ARRAY' and $U->is_true($r->[0]->{has_perm})); } } @@ -577,9 +579,11 @@ sub objects_allowed { '+ppl' => {code => $perm} } }; - + my $list = $self->json_query($query); - push(@ids, 0+$_->{object_id}) for @$list; + if (ref($list) eq 'ARRAY') { + push(@ids, 0+$_->{object_id}) for @$list; + } } my %trim;