]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_spidermonkey: allow inline javascript, use a ~ as first script character
authorMathieu Rene <mrene@avgs.ca>
Sat, 21 Nov 2009 07:37:35 +0000 (07:37 +0000)
committerMathieu Rene <mrene@avgs.ca>
Sat, 21 Nov 2009 07:37:35 +0000 (07:37 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15598 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_spidermonkey/mod_spidermonkey.c

index fdb983ad9ce4a0026a54127cf71416ec5e12496f..6b15f7edb14ac21d60d32fa7894a005b502a48db 100644 (file)
@@ -3597,6 +3597,10 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp
        struct js_session *jss;
        JSContext *cx = NULL;
        jsval rval;
+       
+       if (zstr(input_code)) {
+               return;
+       }
 
        if ((cx = JS_NewContext(globals.rt, globals.gStackChunkSize))) {
                JS_BeginRequest(cx);
@@ -3620,24 +3624,26 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp
 
        script = input_code;
 
-       if ((arg = strchr(script, ' '))) {
-               *arg++ = '\0';
-               argc = switch_separate_string(arg, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
-       }
+       if (*script != '~') {   
+               if ((arg = strchr(script, ' '))) {
+                       *arg++ = '\0';
+                       argc = switch_separate_string(arg, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+               }
 
-       if (!argc) {
-               switch_snprintf(buf, sizeof(buf), "~var argv = new Array();");
-               eval_some_js(buf, cx, javascript_global_object, &rval);
-       } else {
-               /* create a js doppleganger of this argc/argv */
-               switch_snprintf(buf, sizeof(buf), "~var argv = new Array(%d);", argc);
-               eval_some_js(buf, cx, javascript_global_object, &rval);
-               switch_snprintf(buf, sizeof(buf), "~var argc = %d", argc);
-               eval_some_js(buf, cx, javascript_global_object, &rval);
-
-               for (y = 0; y < argc; y++) {
-                       switch_snprintf(buf, sizeof(buf), "~argv[%d] = \"%s\";", x++, argv[y]);
+               if (!argc) {
+                       switch_snprintf(buf, sizeof(buf), "~var argv = new Array();");
                        eval_some_js(buf, cx, javascript_global_object, &rval);
+               } else {
+                       /* create a js doppleganger of this argc/argv */
+                       switch_snprintf(buf, sizeof(buf), "~var argv = new Array(%d);", argc);
+                       eval_some_js(buf, cx, javascript_global_object, &rval);
+                       switch_snprintf(buf, sizeof(buf), "~var argc = %d", argc);
+                       eval_some_js(buf, cx, javascript_global_object, &rval);
+
+                       for (y = 0; y < argc; y++) {
+                               switch_snprintf(buf, sizeof(buf), "~argv[%d] = \"%s\";", x++, argv[y]);
+                               eval_some_js(buf, cx, javascript_global_object, &rval);
+                       }
                }
        }