Module: kamailio Branch: master Commit: acb90b6634e65a21c655e9bb94c1af00c138e6d4 URL: https://github.com/kamailio/kamailio/commit/acb90b6634e65a21c655e9bb94c1af00c138e6d4
Author: Daniel-Constantin Mierla <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2018-07-09T15:41:59+02:00 app_jsdt: restore JS stack after executing a function --- Modified: src/modules/app_jsdt/app_jsdt_api.c --- Diff: https://github.com/kamailio/kamailio/commit/acb90b6634e65a21c655e9bb94c1af00c138e6d4.diff Patch: https://github.com/kamailio/kamailio/commit/acb90b6634e65a21c655e9bb94c1af00c138e6d4.patch --- diff --git a/src/modules/app_jsdt/app_jsdt_api.c b/src/modules/app_jsdt/app_jsdt_api.c index ff9f2ad19d..224d54bfe6 100644 --- a/src/modules/app_jsdt/app_jsdt_api.c +++ b/src/modules/app_jsdt/app_jsdt_api.c @@ -770,6 +770,7 @@ int app_jsdt_run_ex(sip_msg_t *msg, char *func, char *p1, char *p2, int ret; str txt; sip_msg_t *bmsg; + duk_idx_t jtop; if(_sr_J_env.JJ==NULL) { LM_ERR("js loading state not initialized (call: %s)\n", func); @@ -779,7 +780,8 @@ int app_jsdt_run_ex(sip_msg_t *msg, char *func, char *p1, char *p2, jsdt_kemi_reload_script(); LM_DBG("executing js function: [[%s]]\n", func); - LM_DBG("js top index is: %d\n", duk_get_top(_sr_J_env.JJ)); + jtop = duk_get_top(_sr_J_env.JJ); + LM_DBG("js top index is: %d\n", (int)jtop); duk_get_global_string(_sr_J_env.JJ, func); if(!duk_is_function(_sr_J_env.JJ, -1)) { @@ -789,8 +791,10 @@ int app_jsdt_run_ex(sip_msg_t *msg, char *func, char *p1, char *p2, duk_get_type(_sr_J_env.JJ, -1)); txt.s = (char*)duk_to_string(_sr_J_env.JJ, -1); LM_ERR("error from JS: %s\n", (txt.s)?txt.s:"unknown"); + duk_set_top(_sr_J_env.JJ, jtop); return -1; } else { + duk_set_top(_sr_J_env.JJ, jtop); return 1; } } @@ -840,15 +844,16 @@ int app_jsdt_run_ex(sip_msg_t *msg, char *func, char *p1, char *p2, LM_ERR("error from js: unknown\n"); } } - duk_pop(_sr_J_env.JJ); if(n==1) { + duk_set_top(_sr_J_env.JJ, jtop); return 1; } else { LM_ERR("error executing: %s (err: %d)\n", func, ret); + duk_set_top(_sr_J_env.JJ, jtop); return -1; } } - duk_pop(_sr_J_env.JJ); + duk_set_top(_sr_J_env.JJ, jtop); return 1; } _______________________________________________ Kamailio (SER) - Development Mailing List [email protected] https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev
