# 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))},