]> granicus.if.org Git - ejabberd/commitdiff
Add check for ljid when setting up subscribers
authorPaweł Chmielowski <pchmielowski@process-one.net>
Thu, 14 Mar 2019 14:54:51 +0000 (15:54 +0100)
committerPaweł Chmielowski <pchmielowski@process-one.net>
Thu, 14 Mar 2019 14:54:51 +0000 (15:54 +0100)
src/mod_muc_room.erl

index 5448166738ce33027ca09f3cfb81182f20b0d2c3..a048272ca5962d7621807a5acc22b61f554f36e3 100644 (file)
@@ -1689,7 +1689,12 @@ update_online_user(JID, #user{nick = Nick} = User, StateData) ->
     NewStateData.
 
 set_subscriber(JID, Nick, Nodes, StateData) ->
-    BareJID = jid:remove_resource(JID),
+    BareJID = case JID of
+                 #jid{} -> jid:remove_resource(JID);
+                 _ ->
+                     ?ERROR_MSG("Invalid subscriber JID in set_subscriber ~p", [JID]),
+                     jid:remove_resource(jid:make(JID))
+             end,
     LBareJID = jid:tolower(BareJID),
     Subscribers = maps:put(LBareJID,
                           #subscriber{jid = BareJID,
@@ -3674,14 +3679,20 @@ set_opts([{Opt, Val} | Opts], StateData) ->
                  {Subscribers, Nicks} =
                      lists:foldl(
                        fun({JID, Nick, Nodes}, {SubAcc, NickAcc}) ->
-                               BareJID = jid:remove_resource(JID),
-                               {maps:put(
-                                  jid:tolower(BareJID),
-                                  #subscriber{jid = BareJID,
-                                              nick = Nick,
-                                              nodes = Nodes},
-                                  SubAcc),
-                                maps:put(Nick, [jid:tolower(BareJID)], NickAcc)}
+                           BareJID = case JID of
+                                         #jid{} -> jid:remove_resource(JID);
+                                         _ ->
+                                             ?ERROR_MSG("Invalid subscriber JID in set_opts ~p", [JID]),
+                                             jid:remove_resource(jid:make(JID))
+                                     end,
+                           LBareJID = jid:tolower(BareJID),
+                           {maps:put(
+                               LBareJID,
+                               #subscriber{jid = BareJID,
+                                           nick = Nick,
+                                           nodes = Nodes},
+                               SubAcc),
+                            maps:put(Nick, [LBareJID], NickAcc)}
                        end, {#{}, #{}}, Val),
                  StateData#state{subscribers = Subscribers,
                                  subscriber_nicks = Nicks};