java-topology/defects/ejabberd/patch/ejabberd-0002.patch

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.