37 lines
1.3 KiB
Diff
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))},
|