Compare commits

...

4 Commits

Author SHA1 Message Date
Anton Olofsson 4d6bb8c80b
Merge 51eab5cfe8 into 5e82e4f305 2025-01-31 16:49:25 +00:00
Andrey Volk 5e82e4f305
Merge pull request #2755 from signalwire/eslleak
[esl] 1227669 Resource leak
2025-01-31 18:36:53 +03:00
Andrey Volk d895fdff60 [esl] 1227669 Resource leak 2025-01-31 18:09:18 +03:00
Anton Olofsson 51eab5cfe8 Always clear flag TFLAG_NEW_SDP
This prevents re-processing of unmodified SDP during re-INVITEs.
Before this change a remote party's UNMODIFIED answer to a re-INVITE would always be re-processed once,
due to TFLAG_NEW_SDP still being set.
2024-05-02 10:15:02 +02:00
2 changed files with 4 additions and 2 deletions

View File

@ -990,6 +990,8 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
} }
memcpy(&handle->sockaddr, result->ai_addr, result->ai_addrlen); memcpy(&handle->sockaddr, result->ai_addr, result->ai_addrlen);
freeaddrinfo(result);
switch(handle->sockaddr.ss_family) { switch(handle->sockaddr.ss_family) {
case AF_INET: case AF_INET:
sockaddr_in = (struct sockaddr_in*)&(handle->sockaddr); sockaddr_in = (struct sockaddr_in*)&(handle->sockaddr);
@ -1005,7 +1007,6 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
strncpy(handle->err, "Host resolves to unsupported address family", sizeof(handle->err)); strncpy(handle->err, "Host resolves to unsupported address family", sizeof(handle->err));
goto fail; goto fail;
} }
freeaddrinfo(result);
handle->sock = socket(handle->sockaddr.ss_family, SOCK_STREAM, IPPROTO_TCP); handle->sock = socket(handle->sockaddr.ss_family, SOCK_STREAM, IPPROTO_TCP);

View File

@ -8503,7 +8503,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
/* sdp changed since 18X w sdp, we're supposed to ignore it but we, of course, were pressured into supporting it */ /* sdp changed since 18X w sdp, we're supposed to ignore it but we, of course, were pressured into supporting it */
uint8_t match = 0; uint8_t match = 0;
sofia_clear_flag(tech_pvt, TFLAG_NEW_SDP);
switch_channel_set_flag(tech_pvt->channel, CF_REINVITE); switch_channel_set_flag(tech_pvt->channel, CF_REINVITE);
@ -8531,6 +8531,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
} }
} }
sofia_clear_flag(tech_pvt, TFLAG_NEW_SDP);
if (r_sdp && sofia_test_flag(tech_pvt, TFLAG_NOSDP_REINVITE)) { if (r_sdp && sofia_test_flag(tech_pvt, TFLAG_NOSDP_REINVITE)) {
sofia_clear_flag_locked(tech_pvt, TFLAG_NOSDP_REINVITE); sofia_clear_flag_locked(tech_pvt, TFLAG_NOSDP_REINVITE);