]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_sofia] Coverity fixes
authorDragos Oancea <dragos@signalwire.com>
Mon, 12 Jun 2023 15:17:12 +0000 (18:17 +0300)
committerGitHub <noreply@github.com>
Mon, 12 Jun 2023 15:17:12 +0000 (18:17 +0300)
[mod_sofia] coverity CID 1024253 (Dereference before null check)
[mod_sofia] coverity CID 1024254 (Dereference before null check)
[mod_sofia] coverity CID 1257620 (Logically dead code)
[mod_sofia] coverity CID 1024750 (Dereference null return value)

src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index 0b74b89c9da5ff6887f7043848946f3dc31892b5..4ff6f2fcff81788bba7fbf76b3ee45f22d2b9a66 100644 (file)
@@ -472,7 +472,7 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session)
                switch_core_hash_delete_locked(tech_pvt->profile->chat_hash, tech_pvt->hash_key, tech_pvt->profile->flag_mutex);
        }
 
-       if (session && tech_pvt->profile->pres_type) {
+       if (tech_pvt->profile->pres_type) {
                char *sql = switch_mprintf("delete from sip_dialogs where uuid='%q'", switch_core_session_get_uuid(session));
                switch_assert(sql);
                sofia_glue_execute_sql_now(tech_pvt->profile, &sql, SWITCH_TRUE);
@@ -2205,11 +2205,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
                                                                                                        argv[i], (double)((double)(MAX_REDIR + 1 - i))/1000);
                                                                }
                                                        } else {
-                                                               if (i == argc - 1) {
-                                                                       switch_snprintf(newdest + strlen(newdest), len - strlen(newdest), "\"unknown\" <%s>", argv[i]);
-                                                               } else {
-                                                                       switch_snprintf(newdest + strlen(newdest), len - strlen(newdest), "\"unknown\" <%s>,", argv[i]);
-                                                               }
+                                                               switch_snprintf(newdest + strlen(newdest), len - strlen(newdest), "\"unknown\" <%s>", argv[i]);
                                                        }
                                                } else {
                                                        if (i == argc - 1) {
@@ -4313,6 +4309,8 @@ SWITCH_STANDARD_API(sofia_presence_data_function)
                user = argv[1];
        }
 
+       if (!user) goto end;
+
        if ((domain = strchr(user, '@'))) {
                *domain++ = '\0';
                if ((concat = strchr(domain, '/'))) {
@@ -4329,8 +4327,6 @@ SWITCH_STANDARD_API(sofia_presence_data_function)
                domain = dup_domain;
        }
 
-       if (!user) goto end;
-
        if (zstr(profile_name) || strcmp(profile_name, "*") || zstr(domain)) {
                if (!zstr(profile_name)) {
                        profile = sofia_glue_find_profile(profile_name);
index f14b574adf90a3c519d4f7e9a8e212919308eea3..c5b5bcc1901505d3392e0e8a9e3384652d4e1517 100644 (file)
@@ -2818,7 +2818,10 @@ void event_handler(switch_event_t *event)
 
                        if ((sptr = strstr(fixed_contact_str, needle))) {
                                char *origsptr = strstr(contact_str, needle);
-                               eptr = strchr(++origsptr, ';');
+
+                               if (origsptr) {
+                                       eptr = strchr(++origsptr, ';');
+                               }
                        } else {
                                sptr = strchr(fixed_contact_str, '\0') - 1;
                        }
index 0eb0dcf601ea4e9d165bcb90a283546edbf3ffeb..eceae218f8d55be2058e785529ed1fc7b7d3b55f 100644 (file)
@@ -2282,8 +2282,7 @@ int sofia_recover_callback(switch_core_session_t *session)
        switch_channel_t *channel = switch_core_session_get_channel(session);
        private_object_t *tech_pvt = NULL;
        sofia_profile_t *profile = NULL;
-       const char *tmp;
-       const char *rr;
+       const char *tmp, *rr, *use_uuid;
        int r = 0;
        const char *profile_name = switch_channel_get_variable_dup(channel, "recovery_profile_name", SWITCH_FALSE, -1);
        int swap = switch_channel_var_true(channel, "dlg_req_swap_direction");
@@ -2374,17 +2373,13 @@ int sofia_recover_callback(switch_core_session_t *session)
                                                                                   );
        }
 
-       if (session) {
-               const char *use_uuid;
-
-               if ((use_uuid = switch_channel_get_variable(channel, "origination_uuid"))) {
-                       if (switch_core_session_set_uuid(session, use_uuid) == SWITCH_STATUS_SUCCESS) {
-                               switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s set UUID=%s\n", switch_channel_get_name(channel),
-                                                                 use_uuid);
-                       } else {
-                               switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_CRIT, "%s set UUID=%s FAILED\n",
-                                                                 switch_channel_get_name(channel), use_uuid);
-                       }
+       if ((use_uuid = switch_channel_get_variable(channel, "origination_uuid"))) {
+               if (switch_core_session_set_uuid(session, use_uuid) == SWITCH_STATUS_SUCCESS) {
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s set UUID=%s\n", switch_channel_get_name(channel),
+                                                         use_uuid);
+               } else {
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_CRIT, "%s set UUID=%s FAILED\n",
+                                                         switch_channel_get_name(channel), use_uuid);
                }
        }