diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2016-10-07 00:20:45 +0300 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2016-10-07 00:20:45 +0300 |
commit | e54ba3db5b6a3af66cfc84b9624cf2438c83449b (patch) | |
tree | 732b16ebbb72f7c0dcfeb72f817f0b5d05192223 /src/ejabberd_c2s.erl | |
parent | 0ae84a646f91413b3cdf309c72d1a3c77256cdd1 (diff) |
XEP-0198: Cope with invalid 'from'/'to' attributes
Check whether the 'from' and 'to' attributes are valid before bouncing
or resending a stanza from the stream management queue. They might be
invalid in certain corner cases.
Thanks to Evgeniy for spotting this.
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 226c5e0da..6068c85ef 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -2998,10 +2998,13 @@ handle_unacked_stanzas(#state{mgmt_state = MgmtState} = StateData, F) lists:foreach( fun({_, Time, #xmlel{attrs = Attrs} = El}) -> From_s = fxml:get_attr_s(<<"from">>, Attrs), - From = jid:from_string(From_s), To_s = fxml:get_attr_s(<<"to">>, Attrs), - To = jid:from_string(To_s), - F(From, To, El, Time) + case {jid:from_string(From_s), jid:from_string(To_s)} of + {#jid{} = From, #jid{} = To} -> + F(From, To, El, Time); + {_, _} -> + ?DEBUG("Dropping stanza due to invalid JID(s)", []) + end end, queue:to_list(Queue)) end; handle_unacked_stanzas(_StateData, _F) -> |