diff --git a/src/modules/topos/tps_storage.c b/src/modules/topos/tps_storage.c index 95f1097bd65..950d1982f49 100644 --- a/src/modules/topos/tps_storage.c +++ b/src/modules/topos/tps_storage.c @@ -214,10 +214,19 @@ int tps_storage_fill_contact(sip_msg_t *msg, tps_data_t *td, str *uuid, int dir) } else { sv = td->as_contact; } + if(sv.len<=0) { + /* no contact - skip */ + return 0; + } + if(td->cp + 8 + (2*uuid->len) + sv.len >= td->cbuf + TPS_DATA_SIZE) { LM_ERR("insufficient data buffer\n"); return -1; } + if (parse_uri(sv.s, sv.len, &puri) < 0) { + LM_ERR("failed to parse the uri\n"); + return -1; + } if(dir==TPS_DIR_DOWNSTREAM) { td->b_uuid.s = td->cp; *td->cp = 'b'; @@ -225,6 +234,8 @@ int tps_storage_fill_contact(sip_msg_t *msg, tps_data_t *td, str *uuid, int dir) memcpy(td->cp, uuid->s, uuid->len); td->cp += uuid->len; td->b_uuid.len = td->cp - td->b_uuid.s; + + td->bs_contact.s = td->cp; } else { td->a_uuid.s = td->cp; *td->cp = 'a'; @@ -232,20 +243,7 @@ int tps_storage_fill_contact(sip_msg_t *msg, tps_data_t *td, str *uuid, int dir) memcpy(td->cp, uuid->s, uuid->len); td->cp += uuid->len; td->a_uuid.len = td->cp - td->a_uuid.s; - } - if(sv.len<=0) { - /* no contact - skip */ - return 0; - } - - if (parse_uri(sv.s, sv.len, &puri) < 0) { - LM_ERR("failed to parse the uri\n"); - return -1; - } - if(dir==TPS_DIR_DOWNSTREAM) { - td->bs_contact.s = td->cp; - } else { td->as_contact.s = td->cp; } *td->cp = '<';