[Rt-commit] rt branch, 4.4/membersobj-check-for-group, created. rt-4.4.4-83-g829e7b89ed
Craig Kaiser
craig at bestpractical.com
Wed Jan 29 12:17:18 EST 2020
The branch, 4.4/membersobj-check-for-group has been created
at 829e7b89ed470782e5ca819e2819e69c0823180d (commit)
- Log -----------------------------------------------------------------
commit e5ba359d13c5ae77f6d102577f9bd5856b4bdbb6
Author: Craig Kaiser <craig at bestpractical.com>
Date: Wed Jan 29 12:15:39 2020 -0500
Check that group object is defined before trying to limit
If RT::Group object is unloaded then the limit call for MembersObj will
result in a sql error.
diff --git a/lib/RT/Group.pm b/lib/RT/Group.pm
index 19a41ef7a9..1d3d833522 100644
--- a/lib/RT/Group.pm
+++ b/lib/RT/Group.pm
@@ -755,12 +755,17 @@ sub MembersObj {
my $self = shift;
my $members_obj = RT::GroupMembers->new( $self->CurrentUser );
- #If we don't have rights, don't include any results
- # TODO XXX WHY IS THERE NO ACL CHECK HERE?
- $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
-
- return ( $members_obj );
+ if ( $self->PrincipalId ) {
+ #If we don't have rights, don't include any results
+ # TODO XXX WHY IS THERE NO ACL CHECK HERE?
+ $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
+ return ( $members_obj );
+ }
+ else {
+ RT::Logger->error( "Can't call MembersObj on unloaded group, returning undef." );
+ return undef;
+ }
}
commit 829e7b89ed470782e5ca819e2819e69c0823180d
Author: Craig Kaiser <craig at bestpractical.com>
Date: Wed Jan 29 12:16:14 2020 -0500
Add test for calling MembersObj on unloaded group object
diff --git a/t/api/group.t b/t/api/group.t
index f82dfc57e9..2b3f31c1ca 100644
--- a/t/api/group.t
+++ b/t/api/group.t
@@ -3,7 +3,7 @@ use strict;
use warnings;
use RT;
use RT::Test nodata => 1, tests => undef;
-
+use Test::Warn;
{
@@ -116,4 +116,32 @@ is($u->PrincipalObj->PrincipalType , 'Group' , "Principal 4 is a group");
ok( !$id, "can't create duplicated group even case is different: $msg" );
}
+diag 'create a custom role and try to load role group before one has been created.';
+{
+ my $engineer = RT::CustomRole->new(RT->SystemUser);
+ my ($ok, $msg) = $engineer->Create(
+ Name => 'Engineer',
+ MaxValues => 1,
+ );
+ ok($ok, "created role: $msg");
+
+ my $general = RT::Test->load_or_create_queue( Name => 'General' );
+
+ ($ok, $msg) = $engineer->AddToObject($general->id);
+ ok($ok, "added engineer to General: $msg");
+
+ ok(my $t = RT::Ticket->new(RT->SystemUser));
+ ok((my $id, $msg) = $t->Create( Queue => $general->Id,
+ Subject => 'Testing'
+ ));
+
+ my $group = RT::Group->new(RT->SystemUser);
+ $group->LoadRoleGroup(Object => $t, Name => 'Engineer');
+ is($group->Id, undef);
+
+ warning_like {
+ is($group->MembersObj, undef);
+ } qr/Can't call MembersObj on unloaded group, returning undef./, "Generates a warning about unloaded group";
+}
+
done_testing;
-----------------------------------------------------------------------
More information about the rt-commit
mailing list