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
(cherry picked from commit 94c26e92b5)
mr12.5
Donat Zenichev 11 months ago
parent 56411f0c65
commit c519776f82

@ -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;

Loading…
Cancel
Save