summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2015-09-17 11:36:45 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2015-09-17 11:37:01 +0200
commitf6b892b36623bb35b1140682544202c52583dd0b (patch)
tree492d37b1a7943f6bb3e84cf9d34e1a65ef117bb2
parentLet 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.erl16
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 ->