From f6b892b36623bb35b1140682544202c52583dd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Thu, 17 Sep 2015 11:36:45 +0200 Subject: [PATCH] Guard against passing undefined C2SPid to xml parser before become_controller gets called Our new nif xml parser don't handle this gracefully, so we better don't call it that way. This is only triggered on old style ssl sockets, where ssl layer must be activated early, before association between socket and c2s is established --- src/ejabberd_receiver.erl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ejabberd_receiver.erl b/src/ejabberd_receiver.erl index f63ae1ccb..3f8f979dc 100644 --- a/src/ejabberd_receiver.erl +++ b/src/ejabberd_receiver.erl @@ -159,8 +159,13 @@ handle_call({starttls, TLSSocket}, _From, c2s_pid = C2SPid, max_stanza_size = MaxStanzaSize} = State) -> close_stream(XMLStreamState), - NewXMLStreamState = xml_stream:new(C2SPid, - MaxStanzaSize), + NewXMLStreamState = case C2SPid of + undefined -> + XMLStreamState; + _ -> + xml_stream:new(C2SPid, + MaxStanzaSize) + end, NewState = State#state{socket = TLSSocket, sock_mod = p1_tls, xml_stream_state = NewXMLStreamState}, @@ -347,7 +352,12 @@ process_data(Data, shaper_state = ShaperState, c2s_pid = C2SPid} = State) -> ?DEBUG("Received XML on stream = ~p", [(Data)]), - XMLStreamState1 = xml_stream:parse(XMLStreamState, Data), + XMLStreamState1 = case XMLStreamState of + undefined -> + XMLStreamState; + _ -> + xml_stream:parse(XMLStreamState, Data) + end, {NewShaperState, Pause} = shaper:update(ShaperState, byte_size(Data)), if C2SPid == undefined ->