res_pjsip_session: Do not call session supplements when it's too late.
authorMark Michelson <mmichelson@digium.com>
Tue, 8 Nov 2016 16:48:32 +0000 (10:48 -0600)
committerGeorge Joseph <gjoseph@digium.com>
Wed, 9 Nov 2016 16:48:19 +0000 (11:48 -0500)
commite5860ce07ddf0f81dd20d1b1133a9f95e17976f9
treeff6c096984669da3555621234ea4f222d713d364
parent0d85f1868d3b35f8c7582d519f3640a7cd2d4ce6
res_pjsip_session: Do not call session supplements when it's too late.

res_pjsip_sesssion was hooking into transaction and invite state
changes. One of the reasons for doing so was due to the
PJSIP_EVENT_TX_MSG event. The idea was that we were hooking into the
message sending process, and so we should call session supplements to
alter the outgoing message.

In reality, this event was meant to indicate that the message either
a) had already been sent, or
b) required a DNS lookup and would be sent when the DNS query
completed.

In case (a), this meant we were altering an already-sent
request/response for no reason. In case (b), this potentially meant we
could be trying to alter a request/response at the same time that the
DNS resolution completed. In this case, it meant we might be stomping on
memory being used by the thread actually sending the message. This
caused potential crashes and memory corruption.

This patch removes the calls to session supplements from the case where
the PJSIP_EVENT_TX_MSG event occurs. In all of these cases, trying to
alter the message at this point is too late, and it can cause nothing
but harm to try to do it. Because there were no longer any calls to the
handle_outgoing() function, it has been removed.

Change-Id: Ibcc223fb1c3a237927f38754e0429e80ee301e92
res/res_pjsip_session.c