diff --git a/src/core/parser/contact/contact.c b/src/core/parser/contact/contact.c index 322a22e9590..c67fe681d51 100644 --- a/src/core/parser/contact/contact.c +++ b/src/core/parser/contact/contact.c @@ -232,10 +232,12 @@ int parse_contacts(str *_s, contact_t **_c) param_hooks_t hooks; str sv; int n; + int star; sv = *_s; n = 0; + star = 0; while(1) { /* Allocate and clear contact structure */ c = (contact_t *)pkg_malloc(sizeof(contact_t)); @@ -277,6 +279,25 @@ int parse_contacts(str *_s, contact_t **_c) LM_ERR("invalid contact uri\n"); goto error; } + if(c->uri.len == 1) { + if(c->uri.s[0] == '*') { + if(star == 1) { + LM_ERR("too many star contacts - index %d\n", n); + goto error; + } else { + star = 1; + } + } else { + LM_ERR("contact uri size 1 is too short - index %d\n", n); + goto error; + } + } else if(c->uri.len < 3) { + /* minimum length 's:a' (s - schema; a - address) */ + LM_ERR("contact uri size %d is too short - index %d\n", n, + c->uri.len); + goto error; + } + if(_s->len == 0) goto ok;