Skip to content

Commit

Permalink
erlang: Fix parameter capabilities check
Browse files Browse the repository at this point in the history
Fix check getters of erl_send parameters.
  • Loading branch information
seudin committed May 24, 2015
1 parent 70e177f commit fd98d37
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
21 changes: 13 additions & 8 deletions modules/erlang/mod_erlang.c
Expand Up @@ -1124,7 +1124,7 @@ static int erl_send_k(struct sip_msg *msg, char *_pid, char *_emsg)

if (sp.getf == pv_pid_get ) {
xmsg = pv_pid_get_pid(&pvn->u.isname.name.s);
} else if (sp.setf == pv_xbuff_set) {
} else if (sp.getf == pv_xbuff_get) {
xmsg = pv_xbuff_get_xbuff(&pvn->u.isname.name.s);
} else {
LM_ERR("BUG: unexpected type for pid parameter\n");
Expand Down Expand Up @@ -1208,12 +1208,16 @@ static int erl_send_k(struct sip_msg *msg, char *_pid, char *_emsg)
pvn = &pvp.pvn;
}

if (sp.setf == pv_list_set ) {
if (sp.getf == pv_list_get ) {
xmsg = pv_list_get_list(&pvn->u.isname.name.s);
} else if (sp.setf == pv_xbuff_set) {
} else if (sp.getf == pv_xbuff_get) {
xmsg = pv_xbuff_get_xbuff(&pvn->u.isname.name.s);
} else if (sp.setf == pv_tuple_set) {
} else if (sp.getf == pv_tuple_get) {
xmsg = pv_tuple_get_tuple(&pvn->u.isname.name.s);
} else if (sp.getf == pv_atom_get) {
xmsg = pv_atom_get_atom(&pvn->u.isname.name.s);
} else if (sp.getf == pv_pid_get) {
xmsg = pv_pid_get_pid(&pvn->u.isname.name.s);
}

/* fix index */
Expand Down Expand Up @@ -1364,10 +1368,11 @@ static int fixup_send(void** param, int param_no)
return E_UNSPEC;
}

if (erl_param->value.sp.setf == pv_list_set
|| erl_param->value.sp.setf == pv_xbuff_set
|| erl_param->value.sp.setf == pv_tuple_set
|| erl_param->value.sp.setf == pv_atom_set) {
if (erl_param->value.sp.getf == pv_list_get
|| erl_param->value.sp.getf == pv_xbuff_get
|| erl_param->value.sp.getf == pv_tuple_get
|| erl_param->value.sp.getf == pv_atom_get
|| erl_param->value.sp.getf == pv_pid_get) {

erl_param->type = ERL_PARAM_XBUFF_SPEC;
} else {
Expand Down
5 changes: 5 additions & 0 deletions modules/erlang/pv_atom.c
Expand Up @@ -146,6 +146,11 @@ sr_xavp_t *xavp_get_atoms()
return list;
}

sr_xavp_t *pv_atom_get_atom(str *name)
{
return xavp_get_child(&atom_list, name);
}

int pv_atom_set(struct sip_msg* msg, pv_param_t* param, int op, pv_value_t* val)
{
str name;
Expand Down
2 changes: 2 additions & 0 deletions modules/erlang/pv_atom.h
Expand Up @@ -32,4 +32,6 @@ int pv_atom_get(struct sip_msg*, pv_param_t*, pv_value_t*);

void free_atom_fmt_buff();

sr_xavp_t *pv_atom_get_atom(str *name);

#endif /* PV_ATOM_H_ */

0 comments on commit fd98d37

Please sign in to comment.