From 94c26e92b5703f42744ade3cc71cc1ff021c7f66 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Mon, 29 Jul 2024 16:26:37 +0200 Subject: [PATCH] MT#60588 redis: allocate `sdp_origin` using g_malloc Allocate sdp_origin members using `str_init_dup_str()` which uses g_malloc, so that when freeing the sdp_origin structure later in `sdp_orig_free()` it doesn't inadvertently lead to the seg fault. Otherwise if any member isn't recovered (e.g. username) it remains pointing to NULL with 0 len, which will be gracefully handled in `str_free_dup()`. Change-Id: I131f0096103052445754cc01ac5072776e957cda --- daemon/redis.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/daemon/redis.c b/daemon/redis.c index 624f411ed..e52851e47 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -1519,17 +1519,17 @@ static int redis_tags(call_t *c, struct redis_list *tags, JsonReader *root_reade ml->session_sdp_orig->parsed = 1; redis_hash_get_llu(&ml->session_sdp_orig->version_num, rh, "sdp_orig_version_num"); if (!redis_hash_get_str(&s, rh, "sdp_orig_username")) - call_str_cpy(c, &ml->session_sdp_orig->username, &s); + str_init_dup_str(&ml->session_sdp_orig->username, &s); if (!redis_hash_get_str(&s, rh, "sdp_orig_session_id")) - call_str_cpy(c, &ml->session_sdp_orig->session_id, &s); + str_init_dup_str(&ml->session_sdp_orig->session_id, &s); if (!redis_hash_get_str(&s, rh, "sdp_orig_version_str")) - call_str_cpy(c, &ml->session_sdp_orig->version_str, &s); + str_init_dup_str(&ml->session_sdp_orig->version_str, &s); if (!redis_hash_get_str(&s, rh, "sdp_orig_address_network_type")) - call_str_cpy(c, &ml->session_sdp_orig->address.network_type, &s); + str_init_dup_str(&ml->session_sdp_orig->address.network_type, &s); if (!redis_hash_get_str(&s, rh, "sdp_orig_address_address_type")) - call_str_cpy(c, &ml->session_sdp_orig->address.address_type, &s); + str_init_dup_str(&ml->session_sdp_orig->address.address_type, &s); if (!redis_hash_get_str(&s, rh, "sdp_orig_address_address")) - call_str_cpy(c, &ml->session_sdp_orig->address.address, &s); + str_init_dup_str(&ml->session_sdp_orig->address.address, &s); } /* o= last used of the other side*/ if (!redis_hash_get_str(&s, rh, "last_sdp_orig_parsed")) { @@ -1537,17 +1537,17 @@ static int redis_tags(call_t *c, struct redis_list *tags, JsonReader *root_reade ml->session_last_sdp_orig->parsed = 1; redis_hash_get_llu(&ml->session_last_sdp_orig->version_num, rh, "last_sdp_orig_version_num"); if (!redis_hash_get_str(&s, rh, "last_sdp_orig_username")) - call_str_cpy(c, &ml->session_last_sdp_orig->username, &s); + str_init_dup_str(&ml->session_last_sdp_orig->username, &s); if (!redis_hash_get_str(&s, rh, "last_sdp_orig_session_id")) - call_str_cpy(c, &ml->session_last_sdp_orig->session_id, &s); + str_init_dup_str(&ml->session_last_sdp_orig->session_id, &s); if (!redis_hash_get_str(&s, rh, "last_sdp_orig_version_str")) - call_str_cpy(c, &ml->session_last_sdp_orig->version_str, &s); + str_init_dup_str(&ml->session_last_sdp_orig->version_str, &s); if (!redis_hash_get_str(&s, rh, "last_sdp_orig_address_network_type")) - call_str_cpy(c, &ml->session_last_sdp_orig->address.network_type, &s); + str_init_dup_str(&ml->session_last_sdp_orig->address.network_type, &s); if (!redis_hash_get_str(&s, rh, "last_sdp_orig_address_address_type")) - call_str_cpy(c, &ml->session_last_sdp_orig->address.address_type, &s); + str_init_dup_str(&ml->session_last_sdp_orig->address.address_type, &s); if (!redis_hash_get_str(&s, rh, "last_sdp_orig_address_address")) - call_str_cpy(c, &ml->session_last_sdp_orig->address.address, &s); + str_init_dup_str(&ml->session_last_sdp_orig->address.address, &s); } ml->sdp_session_rr = (!redis_hash_get_int(&ii, rh, "sdp_session_rr")) ? ii : -1;