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

37 lines
1.3 KiB
Diff

# UNDF: UNDF-2026-000000060
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -1021,14 +1021,14 @@ check_store_hint(Pkt) ->
-spec should_archive_peer(binary(), binary(),
#archive_prefs{}, jid()) -> boolean().
should_archive_peer(LUser, LServer,
- #archive_prefs{default = Default,
- always = Always,
- never = Never},
+ #archive_prefs{default = Default,
+ always = AlwaysList,
+ never = NeverList},
Peer) ->
LPeer = jid:remove_resource(jid:tolower(Peer)),
- case lists:member(LPeer, Always) of
+ Always = gb_sets:from_list(AlwaysList),
+ Never = gb_sets:from_list(NeverList),
+ case gb_sets:is_member(LPeer, Always) of
true ->
true;
false ->
- case lists:member(LPeer, Never) of
+ case gb_sets:is_member(LPeer, Never) of
true ->
false;
false ->
@@ -1194,8 +1194,10 @@ check_store_hint(Pkt) ->
write_prefs(LUser, LServer, Host, Default, Always, Never) ->
+ %% Always/Never arrive as sorted lists (lists:usort applied by caller).
+ %% Store as lists for serialisation; convert to gb_sets in hot path.
Prefs = #archive_prefs{us = {LUser, LServer},
default = Default,
- always = Always,
- never = Never},
+ always = gb_sets:to_list(gb_sets:from_list(Always)),
+ never = gb_sets:to_list(gb_sets:from_list(Never))},