]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_sofia] sofia_handle_sip_i_invite() leaks xml and event objects on acl_token...
authorAndrey Volk <andywolk@gmail.com>
Mon, 7 Oct 2019 18:37:33 +0000 (22:37 +0400)
committerAndrey Volk <andywolk@gmail.com>
Mon, 30 Dec 2019 20:45:00 +0000 (00:45 +0400)
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_reg.c

index bc3d9da995a43ef0ad92d29bd892a403abfe113b..aedfb66e5697243126262d70c1a2587fd53488ef 100644 (file)
@@ -10537,6 +10537,10 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
        switch_channel_set_variable_printf(channel, "sip_invite_stamp", "%" SWITCH_TIME_T_FMT, sip_invite_time);
 
        if (*acl_token) {
+               if (x_user) {
+                       switch_xml_free(x_user);
+                       x_user = NULL;
+               }
                switch_channel_set_variable(channel, "acl_token", acl_token);
                if (sofia_locate_user(acl_token, session, sip, &x_user) == SWITCH_STATUS_SUCCESS) {
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Authenticating user %s\n", acl_token);
@@ -10544,6 +10548,9 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Error Authenticating user %s\n", acl_token);
                        if (sofia_test_pflag(profile, PFLAG_AUTH_REQUIRE_USER)) {
                                nua_respond(nh, SIP_480_TEMPORARILY_UNAVAILABLE, TAG_END());
+                               if (v_event) {
+                                       switch_event_destroy(&v_event);
+                               }
                                goto fail;
                        }
                }
index 43d0eeb353f8b501794d816b6d2429758def6d10..569699a1c8426f62b084470c917045067e7776b3 100644 (file)
@@ -2624,9 +2624,8 @@ void sofia_reg_handle_sip_r_challenge(int status,
                                                sip_auth_password = dup_pass;
                                        }
                                }
-
-                               switch_xml_free(x_user);
                        }
+                       switch_xml_free(x_user);
                }
 
                switch_event_destroy(&locate_params);