29 lines
1.1 KiB
Diff
29 lines
1.1 KiB
Diff
# UNDF: UNDF-2026-000000061
|
|
--- a/src/mod_shared_roster.erl
|
|
+++ b/src/mod_shared_roster.erl
|
|
@@ -351,10 +351,10 @@ process_subscription(Direction, User, Server, JID, _Type, Acc) ->
|
|
{DisplayedGroups, _} = get_user_displayed_groups(US),
|
|
- SRUsers = lists:usort(lists:flatmap(fun (Group) ->
|
|
- get_group_users(LServer, Group)
|
|
- end,
|
|
- DisplayedGroups)),
|
|
- case lists:member(US1, SRUsers) of
|
|
+ SRUsersSet = lists:foldl(
|
|
+ fun(Group, Acc0) ->
|
|
+ lists:foldl(fun(U, S) -> gb_sets:add(U, S) end,
|
|
+ Acc0, get_group_users(LServer, Group))
|
|
+ end, gb_sets:empty(), DisplayedGroups),
|
|
+ case gb_sets:is_member(US1, SRUsersSet) of
|
|
true ->
|
|
case Direction of
|
|
in -> {stop, false};
|
|
@@ -658,7 +658,8 @@ is_user_in_group(US, Group, Host) ->
|
|
Mod = gen_mod:db_mod(Host, ?MODULE),
|
|
case Mod:is_user_in_group(US, Group, Host) of
|
|
false ->
|
|
- lists:member(US, get_group_users(Host, Group));
|
|
+ GroupSet = gb_sets:from_list(get_group_users(Host, Group)),
|
|
+ gb_sets:is_member(US, GroupSet);
|
|
true ->
|
|
true
|
|
end.
|