From 08e642b988ade9e9507e10cb012736049f37ee4c Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Wed, 13 Dec 2017 16:52:44 +0300 Subject: [PATCH] Only allow compression after SASL See XEP-0170 for details Thanks to Vitaly Takmazov for spotting this --- src/xmpp_stream_in.erl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/xmpp_stream_in.erl b/src/xmpp_stream_in.erl index caad482c5..4c690be3b 100644 --- a/src/xmpp_stream_in.erl +++ b/src/xmpp_stream_in.erl @@ -565,8 +565,6 @@ process_element(Pkt, #{stream_state := StateName, lang := Lang} = State) -> send_pkt(State, #sasl_failure{reason = 'aborted'}); #sasl_success{} -> State; - #compress{} when StateName == wait_for_sasl_response -> - send_pkt(State, #compress_failure{reason = 'setup-failed'}); #compress{} -> process_compress(Pkt, State); #handshake{} when StateName == wait_for_handshake -> @@ -694,7 +692,10 @@ process_stream_established(#{mod := Mod} = State) -> end. -spec process_compress(compress(), state()) -> state(). -process_compress(#compress{}, #{stream_compressed := true} = State) -> +process_compress(#compress{}, + #{stream_compressed := Compressed, + stream_authenticated := Authenticated} = State) + when Compressed or not Authenticated -> send_pkt(State, #compress_failure{reason = 'setup-failed'}); process_compress(#compress{methods = HisMethods}, #{socket := Socket, sockmod := SockMod, mod := Mod} = State) -> @@ -913,7 +914,8 @@ get_sasl_feature(_) -> []. -spec get_compress_feature(state()) -> [compression()]. -get_compress_feature(#{stream_compressed := false, mod := Mod} = State) -> +get_compress_feature(#{stream_compressed := false, mod := Mod, + stream_authenticated := true} = State) -> try Mod:compress_methods(State) of [] -> []; Ms -> [#compression{methods = Ms}]