From 9b20b324f5128d8a455342796674f2a9895976ff Mon Sep 17 00:00:00 2001 From: Dragos Oancea Date: Mon, 12 Jun 2023 18:17:12 +0300 Subject: [PATCH] [mod_sofia] Coverity fixes [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 | 12 ++++-------- src/mod/endpoints/mod_sofia/sofia.c | 5 ++++- src/mod/endpoints/mod_sofia/sofia_glue.c | 21 ++++++++------------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 0b74b89c9d..4ff6f2fcff 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -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); diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index f14b574adf..c5b5bcc190 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -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; } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 0eb0dcf601..eceae218f8 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -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); } }