From 0150337bcb283beade428f10d6661736b7bd8141 Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Wed, 21 Dec 2022 12:17:11 +0100 Subject: [PATCH] MT#56241 pua_dialoginfo: use dlg_api.get_dlg_varval() Change-Id: If37677aebaee90a6c8ca384095b101698e45f59f (cherry picked from commit dbc9b1a745a2c66a12df9e21cefea483b2c10fe4) --- debian/patches/series | 1 + ...ialoginfo-use-dlg_api.get_dlg_varval.patch | 88 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 debian/patches/sipwise/pua_dialoginfo-use-dlg_api.get_dlg_varval.patch diff --git a/debian/patches/series b/debian/patches/series index 6197dd135..fd16578bf 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -46,6 +46,7 @@ upstream/presence-No-autocommit-rollback-if-no-active-watcher.patch sipwise/pua_dialoginfo-refresh_pubruri_avps_flag.patch sipwise/pua_dialoginfo-use-lock-when-use_puburi_avps-is-set.patch sipwise/pua_dialoginfo-local_identity_dlg_var.patch +sipwise/pua_dialoginfo-use-dlg_api.get_dlg_varval.patch sipwise/dialplan-don-t-stop-loading-rules-on-error.patch sipwise/cfgt-skip_unknown.patch sipwise/db_redis_skip_empty_keys.patch diff --git a/debian/patches/sipwise/pua_dialoginfo-use-dlg_api.get_dlg_varval.patch b/debian/patches/sipwise/pua_dialoginfo-use-dlg_api.get_dlg_varval.patch new file mode 100644 index 000000000..1101ba50e --- /dev/null +++ b/debian/patches/sipwise/pua_dialoginfo-use-dlg_api.get_dlg_varval.patch @@ -0,0 +1,88 @@ +From: Victor Seva +Date: Wed, 21 Dec 2022 12:14:57 +0100 +Subject: pua_dialoginfo: use dlg_api.get_dlg_varval() + +* rework creating str_list from dlg_var +--- + src/modules/pua_dialoginfo/pua_dialoginfo.c | 37 +++++++++++++++-------------- + 1 file changed, 19 insertions(+), 18 deletions(-) + +diff --git a/src/modules/pua_dialoginfo/pua_dialoginfo.c b/src/modules/pua_dialoginfo/pua_dialoginfo.c +index 94efcef..4d5503f 100644 +--- a/src/modules/pua_dialoginfo/pua_dialoginfo.c ++++ b/src/modules/pua_dialoginfo/pua_dialoginfo.c +@@ -550,6 +550,7 @@ struct str_list* get_str_list(unsigned short avp_flags, int_str avp_name) { + list_current=list_current->next; + } else { + list_current=list_first= (struct str_list*) shm_malloc( len); ++ list_current->next = 0; + } + + if (list_current==0) { +@@ -574,8 +575,8 @@ struct str_list* get_str_list(unsigned short avp_flags, int_str avp_name) { + struct dlginfo_cell* get_dialog_data(struct dlg_cell *dlg, int type, int disable_caller_publish, int disable_callee_publish) + { + struct dlginfo_cell *dlginfo; +- int len; +- str* s=NULL; ++ int len, len_str_list; ++ str s = STR_NULL; + + // generate new random uuid + if(sruid_next_safe(&_puadi_sruid) < 0) { +@@ -651,39 +652,39 @@ struct dlginfo_cell* get_dialog_data(struct dlg_cell *dlg, int type, int disable + + } else { + if(caller_dlg_var.len>0 +- && (s = dlg_api.get_dlg_varref(dlg, &caller_dlg_var))!=0) { +- dlginfo->pubruris_caller = +- (struct str_list*)shm_malloc(sizeof(struct str_list) + s->len + 1); ++ && dlg_api.get_dlg_varval(dlg, &caller_dlg_var, &s) == 0) { ++ len_str_list = sizeof(struct str_list) + s.len + 1; ++ dlginfo->pubruris_caller = (struct str_list*)shm_malloc(len_str_list); + if (dlginfo->pubruris_caller==0) { + SHM_MEM_ERROR; + free_dlginfo_cell(dlginfo); + return NULL; + } +- memset(dlginfo->pubruris_caller, 0, sizeof(struct str_list)); ++ memset(dlginfo->pubruris_caller, 0, len_str_list); + dlginfo->pubruris_caller->s.s = (char*)dlginfo->pubruris_caller +- + sizeof(sizeof(struct str_list)); +- memcpy(dlginfo->pubruris_caller->s.s, s->s, s->len); +- dlginfo->pubruris_caller->s.s[s->len] = '\0'; +- dlginfo->pubruris_caller->s.len = s->len; ++ + (len_str_list - s.len - 1); ++ memcpy(dlginfo->pubruris_caller->s.s, s.s, s.len); ++ dlginfo->pubruris_caller->s.s[s.len] = '\0'; ++ dlginfo->pubruris_caller->s.len = s.len; + LM_DBG("Found pubruris_caller in dialog '%.*s'\n", + dlginfo->pubruris_caller->s.len, dlginfo->pubruris_caller->s.s); + } + + if(callee_dlg_var.len>0 +- && (s = dlg_api.get_dlg_varref(dlg, &callee_dlg_var))!=0) { +- dlginfo->pubruris_callee = +- (struct str_list*)shm_malloc(sizeof(struct str_list) + s->len + 1); ++ && dlg_api.get_dlg_varval(dlg, &callee_dlg_var, &s) == 0) { ++ len_str_list = sizeof(struct str_list) + s.len + 1; ++ dlginfo->pubruris_callee = (struct str_list*)shm_malloc(len_str_list); + if (dlginfo->pubruris_callee==0) { + SHM_MEM_ERROR; + free_dlginfo_cell(dlginfo); + return NULL; + } +- memset(dlginfo->pubruris_callee, 0, sizeof(struct str_list)); ++ memset(dlginfo->pubruris_callee, 0, len_str_list); + dlginfo->pubruris_callee->s.s = (char*)dlginfo->pubruris_callee +- + sizeof(sizeof(struct str_list)); +- memcpy(dlginfo->pubruris_callee->s.s, s->s, s->len); +- dlginfo->pubruris_callee->s.s[s->len] = '\0'; +- dlginfo->pubruris_callee->s.len = s->len; ++ + (len_str_list - s.len - 1); ++ memcpy(dlginfo->pubruris_callee->s.s, s.s, s.len); ++ dlginfo->pubruris_callee->s.s[s.len] = '\0'; ++ dlginfo->pubruris_callee->s.len = s.len; + LM_DBG("Found pubruris_callee in dialog '%.*s'\n", + dlginfo->pubruris_callee->s.len, dlginfo->pubruris_callee->s.s); + }