From 5f86cb46067462aac2f10a3d0ecb95baf1dc86d8 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 22 Jun 2007 19:59:57 +0000 Subject: [PATCH] add exceptions to js and make invalid session access fatal + exception for a try/catch git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5443 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../mod_spidermonkey/mod_spidermonkey.c | 22 ++++++++++++++----- .../mod_spidermonkey/mod_spidermonkey.h | 1 + .../mod_spidermonkey_core_db.c | 1 + .../mod_spidermonkey_odbc.c | 1 + 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 450af27679..8bcdbe427e 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -44,19 +44,19 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_spidermonkey_shutdown); SWITCH_MODULE_DEFINITION(mod_spidermonkey, mod_spidermonkey_load, mod_spidermonkey_shutdown, NULL); -#define METHOD_SANITY_CHECK() do { \ +#define METHOD_SANITY_CHECK() do { \ if (!jss || !jss->session) { \ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n"); \ + eval_some_js("~throw new Error(\"You must call the session.originate method before calling this method!\");", cx, obj, rval); \ *rval = BOOLEAN_TO_JSVAL(JS_FALSE); \ - return JS_TRUE; \ + return JS_FALSE; \ } \ } while(foo == 1) -#define CHANNEL_SANITY_CHECK() do { \ +#define CHANNEL_SANITY_CHECK() do { \ if (!switch_channel_ready(channel)) { \ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n"); \ + eval_some_js("~throw new Error(\"Session is not active!\");", cx, obj, rval); \ *rval = BOOLEAN_TO_JSVAL(JS_FALSE); \ - return JS_TRUE; \ + return JS_FALSE; \ } \ } while (foo == 1) @@ -838,6 +838,9 @@ static switch_status_t js_common_callback(switch_core_session_t *session, void * jsval argv[4]; JSObject *Event = NULL; jsval nval , *rval = &nval; + JSContext *cx = cb_state->cx; + JSObject *obj = cb_state->obj; + METHOD_SANITY_CHECK(); @@ -2561,6 +2564,13 @@ JSClass fileio_class = { /*********************************************************************************/ static JSBool js_exit(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { + char *supplied_error, code_buf[256] = ""; + + if (argc > 0 && (supplied_error = JS_GetStringBytes(JS_ValueToString(cx, argv[0])))) { + snprintf(code_buf, sizeof(code_buf), "~throw new Error(\"%s\");", supplied_error); + eval_some_js(code_buf, cx, obj, rval); + } + return JS_FALSE; } diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h index 1bee4e82ce..c0d357ee87 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h @@ -145,6 +145,7 @@ struct js_session { JSBool DEFAULT_SET_PROPERTY(JSContext * cx, JSObject *obj, jsval id, jsval *vp) { + eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp); return JS_FALSE; } diff --git a/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c b/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c index aa71b43fa9..b5f4e3368c 100644 --- a/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c +++ b/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c @@ -247,6 +247,7 @@ static JSBool db_setProperty(JSContext * cx, JSObject * obj, jsval id, jsval *vp char *name = JS_GetStringBytes(JS_ValueToString(cx, id)); if (strcmp(name, "_dB_RoW_DaTa_")) { + eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp); *vp = BOOLEAN_TO_JSVAL(JS_FALSE); } return JS_TRUE; diff --git a/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c b/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c index ae89165cbf..7d10073366 100644 --- a/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c +++ b/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c @@ -433,6 +433,7 @@ static JSBool odbc_setProperty(JSContext * cx, JSObject * obj, jsval id, jsval * char *name = JS_GetStringBytes(JS_ValueToString(cx, id)); if (strcmp(name, "_oDbC_dB_RoW_DaTa_")) { + eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp); *vp = BOOLEAN_TO_JSVAL(JS_FALSE); } return JS_TRUE;