From f465d2410084ba9118c1f2610fbefa6989974ce9 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Fri, 16 Nov 2018 16:37:06 +0100 Subject: [PATCH] dispatcher: search in xavp sublist for ds_update_dst() attributes - safety checks for type of the value for root xavp - related to GH #1725 --- src/modules/dispatcher/dispatch.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/dispatcher/dispatch.c b/src/modules/dispatcher/dispatch.c index b5677af0586..80540ee6baa 100644 --- a/src/modules/dispatcher/dispatch.c +++ b/src/modules/dispatcher/dispatch.c @@ -2286,7 +2286,7 @@ int ds_update_dst(struct sip_msg *msg, int upos, int mode) } rxavp = xavp_get(&ds_xavp_dst, NULL); - if(rxavp == NULL) { + if(rxavp == NULL || rxavp->val.type != SR_XTYPE_XAVP) { LM_DBG("no xavp with previous destination record\n"); return -1; } @@ -2297,12 +2297,14 @@ int ds_update_dst(struct sip_msg *msg, int upos, int mode) xavp_rm(rxavp, NULL); rxavp = xavp_get(&ds_xavp_dst, NULL); - if(rxavp == NULL) { + if(rxavp == NULL || rxavp->val.type != SR_XTYPE_XAVP) { LM_DBG("no xavp with next destination record\n"); return -1; } } + /* retrieve attributes from sub list */ + rxavp = rxavp->val.v.xavp; lxavp = xavp_get(&ds_xavp_dst_sock, rxavp); if(lxavp!=NULL && lxavp->val.type==SR_XTYPE_VPTR) { LM_DBG("socket enforced in next destination record\n");