Module: kamailio Branch: master Commit: 0f52906f28fdf38e56fd37e6ed34155b2deee505 URL: https://github.com/kamailio/kamailio/commit/0f52906f28fdf38e56fd37e6ed34155b2deee505
Author: Seudin Kasumovic <[email protected]> Committer: Seudin Kasumovic <[email protected]> Date: 2016-04-26T15:55:30+02:00 erlang: fix where is registered pseudo process - check is event route exist for queried registered process - check argument type and function arity - ensure error message proper formatted --- Modified: modules/erlang/handle_emsg.c --- Diff: https://github.com/kamailio/kamailio/commit/0f52906f28fdf38e56fd37e6ed34155b2deee505.diff Patch: https://github.com/kamailio/kamailio/commit/0f52906f28fdf38e56fd37e6ed34155b2deee505.patch --- diff --git a/modules/erlang/handle_emsg.c b/modules/erlang/handle_emsg.c index 4dbb0a2..e1aa51f 100644 --- a/modules/erlang/handle_emsg.c +++ b/modules/erlang/handle_emsg.c @@ -415,6 +415,36 @@ int handle_net_kernel(cnode_handler_t *phandler, erlang_msg * msg) int erlang_whereis(cnode_handler_t *phandler,erlang_ref_ex_t *ref, erlang_pid *pid) { ei_x_buff *response = &phandler->response; + ei_x_buff *request = &phandler->request; + char route[sizeof("erlang:")+MAXATOMLEN] = "erlang:"; + int arity; + int type; + int rt; + + ei_decode_list_header(request->buff,&request->index,&arity); + + if (arity != 1) { + response->index = 1; + encode_error_msg(response, ref, "badarith", "undefined function erlang:whereis/%d",arity); + return 0; + } + + ei_get_type(request->buff,&request->index,&type,&arity); + + if (type != ERL_ATOM_EXT) { + response->index = 1; + encode_error_msg(response, ref, "badarg", "bad argument"); + return 0; + } + + ei_decode_atom(request->buff,&request->index,route+sizeof("erlang:")-1); + + rt = route_get(&event_rt, route); + if (rt < 0 || event_rt.rlist[rt] == NULL) { + LM_WARN("can't find pseudo process %s\n", route); + ei_x_encode_atom(response,"undefined"); + return 0; + } ei_x_encode_pid(response,&phandler->ec.self); @@ -430,6 +460,7 @@ static int handle_erlang_calls(cnode_handler_t *phandler,erlang_ref_ex_t *ref, e return erlang_whereis(phandler,ref,pid); } else { + response->index = 1; encode_error_msg(response, ref, "badrpc", "Method Not Found"); } _______________________________________________ sr-dev mailing list [email protected] http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
