Module: kamailio Branch: master Commit: ed861cfe7f0f4e265b6dc104a79d07ad7d2997e2 URL: https://github.com/kamailio/kamailio/commit/ed861cfe7f0f4e265b6dc104a79d07ad...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2018-11-19T10:17:27+01:00
presence: safety check for structure vars before accessing fields
---
Modified: src/modules/presence/presence_dmq.c Modified: src/modules/presence/presentity.c
---
Diff: https://github.com/kamailio/kamailio/commit/ed861cfe7f0f4e265b6dc104a79d07ad... Patch: https://github.com/kamailio/kamailio/commit/ed861cfe7f0f4e265b6dc104a79d07ad...
---
diff --git a/src/modules/presence/presence_dmq.c b/src/modules/presence/presence_dmq.c index 9ce259eeaa..258116d53a 100644 --- a/src/modules/presence/presence_dmq.c +++ b/src/modules/presence/presence_dmq.c @@ -193,9 +193,13 @@ presentity_t *pres_parse_json_presentity(srjson_t *in) } }
+ if(!p_event) { + LM_ERR("presence event not found\n"); + return NULL; + } + LM_DBG("building presentity from domain: %.*s, user: %.*s, expires: %d, " - "event: " - "%.*s, etag: %.*s, sender: %.*s", + "event: %.*s, etag: %.*s, sender: %.*s", p_domain.len, p_domain.s, p_user.len, p_user.s, p_expires, p_event->name.len, p_event->name.s, p_etag.len, p_etag.s, p_sender.len, p_sender.s); @@ -301,9 +305,9 @@ int pres_dmq_handle_msg(
switch(action) { case PRES_DMQ_UPDATE_PRESENTITY: - if(update_presentity(NULL, presentity, &p_body, t_new, &sent_reply, - sphere, &cur_etag, &ruid, 0) - < 0) { + if(presentity==NULL + || update_presentity(NULL, presentity, &p_body, t_new, + &sent_reply, sphere, &cur_etag, &ruid, 0) < 0) { goto error; } break; diff --git a/src/modules/presence/presentity.c b/src/modules/presence/presentity.c index 497bfa95ea..5527d3736a 100644 --- a/src/modules/presence/presentity.c +++ b/src/modules/presence/presentity.c @@ -807,7 +807,6 @@ int update_presentity(struct sip_msg* msg, presentity_t* presentity, str* body, } else { - LM_DBG("updating existing presentity with etag %.*s\n", presentity->etag.len, presentity->etag.s);
if (ruid) { @@ -1265,7 +1264,7 @@ int update_presentity(struct sip_msg* msg, presentity_t* presentity, str* body,
done:
- if (pres_enable_dmq>0) { + if (pres_enable_dmq>0 && p_ruid.s!=NULL) { pres_dmq_replicate_presentity(presentity, body, new_t, &cur_etag, sphere, &p_ruid, NULL); }
@@ -1934,9 +1933,9 @@ int delete_offline_presentities(str *pres_uri, pres_ev_t *event) int _api_update_presentity(str *event, str *realm, str *user, str *etag, str *sender, str *body, int expires, int new_t, int replace) { - int ret; + int ret = -1; presentity_t *pres = NULL; - pres_ev_t *ev; + pres_ev_t *ev = NULL; char *sphere = NULL;
ev = contains_event(event, NULL); @@ -1950,10 +1949,12 @@ int _api_update_presentity(str *event, str *realm, str *user, str *etag, if(sphere_enable) { sphere = extract_sphere(*body); } - ret = update_presentity(NULL, pres, body, new_t, NULL, sphere, NULL, NULL, replace); - - if(pres) + if(pres) { + ret = update_presentity(NULL, pres, body, new_t, NULL, sphere, NULL, + NULL, replace); pkg_free(pres); + } + if(sphere) pkg_free(sphere);