diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2015-09-17 11:36:45 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2015-09-17 11:37:01 +0200 |
commit | f6b892b36623bb35b1140682544202c52583dd0b (patch) | |
tree | 492d37b1a7943f6bb3e84cf9d34e1a65ef117bb2 | |
parent | Let BOSH/WebSocket support "max_resume_timeout" (diff) |
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
Diffstat (limited to '')
-rw-r--r-- | src/ejabberd_receiver.erl | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/ejabberd_receiver.erl b/src/ejabberd_receiver.erl index f63ae1cc..3f8f979d 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 -> |