]> granicus.if.org Git - ejabberd/commitdiff
mod_muc_room: Fix the room's CAPS hash
authorHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 13 Sep 2018 22:18:17 +0000 (00:18 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 13 Sep 2018 22:18:17 +0000 (00:18 +0200)
Don't forget the room's xdata when calculating the CAPS hash.

src/mod_muc_room.erl

index a8811f58a0ee7c7d7d82ea0224ea26fc2a1c82d8..9983d95aea65dc48912b54c4384e0728254c23dc 100644 (file)
@@ -2174,7 +2174,9 @@ send_initial_presences_and_messages(From, Nick, Presence, NewState, OldState) ->
 send_self_presence(JID, State) ->
     AvatarHash = (State#state.config)#config.vcard_xupdate,
     DiscoInfo = make_disco_info(JID, State),
-    DiscoHash = mod_caps:compute_disco_hash(DiscoInfo, sha),
+    Extras = iq_disco_info_extras(<<"en">>, State, true),
+    DiscoInfo1 = DiscoInfo#disco_info{xdata = [Extras]},
+    DiscoHash = mod_caps:compute_disco_hash(DiscoInfo1, sha),
     Els1 = [#caps{hash = <<"sha-1">>,
                  node = ejabberd_config:get_uri(),
                  version = DiscoHash}],
@@ -3897,10 +3899,11 @@ process_iq_disco_info(From, #iq{type = get, lang = Lang,
     try
        true = mod_caps:is_valid_node(Node),
        DiscoInfo = make_disco_info(From, StateData),
-       Hash = mod_caps:compute_disco_hash(DiscoInfo, sha),
-       Node = <<(ejabberd_config:get_uri())/binary, $#, Hash/binary>>,
        Extras = iq_disco_info_extras(Lang, StateData, true),
-       {result, DiscoInfo#disco_info{node = Node, xdata = [Extras]}}
+       DiscoInfo1 = DiscoInfo#disco_info{xdata = [Extras]},
+       Hash = mod_caps:compute_disco_hash(DiscoInfo1, sha),
+       Node = <<(ejabberd_config:get_uri())/binary, $#, Hash/binary>>,
+       {result, DiscoInfo1#disco_info{node = Node}}
     catch _:{badmatch, _} ->
            Txt = <<"Invalid node name">>,
            {error, xmpp:err_item_not_found(Txt, Lang)}