From 54d483c4f580458b271bb886de7426402a450c98 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 7 Mar 2007 22:17:02 +0000 Subject: [PATCH] fix fatal include git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4471 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_utils.h | 1 + src/mod/languages/mod_spidermonkey/Makefile | 2 +- .../mod_spidermonkey/mod_spidermonkey.c | 4 ++- .../mod_spidermonkey/mod_spidermonkey.h | 26 +++++++++++++------ src/switch_utils.c | 14 ++++++++++ 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index f45c75e895..32fbfb8622 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -289,6 +289,7 @@ SWITCH_DECLARE(void) switch_perform_substitution(pcre *re, int match_count, char #define SWITCH_READ_ACCEPTABLE(status) (status == SWITCH_STATUS_SUCCESS || status == SWITCH_STATUS_BREAK) SWITCH_DECLARE(size_t) switch_url_encode(char *url, char *buf, size_t len); SWITCH_DECLARE(char *) switch_url_decode(char *s); +SWITCH_DECLARE(switch_status_t) switch_file_exists(const char *filename); SWITCH_END_EXTERN_C #endif diff --git a/src/mod/languages/mod_spidermonkey/Makefile b/src/mod/languages/mod_spidermonkey/Makefile index 284c779780..6f638c99f9 100644 --- a/src/mod/languages/mod_spidermonkey/Makefile +++ b/src/mod/languages/mod_spidermonkey/Makefile @@ -7,7 +7,7 @@ depends: MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install js --prefix=$(PREFIX) --with-pic --with-nspr=yes MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install curl --prefix=$(PREFIX) --without-libidn -$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c +$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c $(MODNAME).h $(CC) $(CFLAGS) -c $(MODNAME).c -o $(MODNAME).o $(CC) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(MODNAME).o $(OBJS) $(LDFLAGS) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 2f74eb59de..fa133fb5a6 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -2248,7 +2248,9 @@ static JSBool js_include(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, { char *code; if ( argc > 0 && (code = JS_GetStringBytes(JS_ValueToString(cx, argv[0])))) { - eval_some_js(code, cx, obj, rval); + if (eval_some_js(code, cx, obj, rval) < 0) { + return JS_FALSE; + } return JS_TRUE; } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Arguements\n"); diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h index 3e84d0ebf0..5fd34dca21 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h @@ -81,7 +81,8 @@ int eval_some_js(char *code, JSContext *cx, JSObject *obj, jsval *rval) JSScript *script = NULL; char *cptr; char *path = NULL; - int res = 0; + char *script_name; + int result = 0; JS_ClearPendingException(cx); @@ -90,19 +91,28 @@ int eval_some_js(char *code, JSContext *cx, JSObject *obj, jsval *rval) script = JS_CompileScript(cx, obj, cptr, strlen(cptr), "inline", 1); } else { if (*code == '/') { - script = JS_CompileFile(cx, obj, code); + script_name = code; } else if ((path = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.script_dir, SWITCH_PATH_SEPARATOR, code))) { - script = JS_CompileFile(cx, obj, path); - switch_safe_free(path); + script_name = path; } + if (script_name) { + if (switch_file_exists(script_name) == SWITCH_STATUS_SUCCESS) { + script = JS_CompileFile(cx, obj, script_name); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Open File: %s\n", script_name); + } + } } - + if (script) { - res = JS_ExecuteScript(cx, obj, script, rval) == JS_TRUE ? 1 : 0; + result = JS_ExecuteScript(cx, obj, script, rval) == JS_TRUE ? 1 : 0; JS_DestroyScript(cx, script); + } else { + result = -1; } - - return res; + + switch_safe_free(path); + return result; } diff --git a/src/switch_utils.c b/src/switch_utils.c index ffa11cebb5..72dc1d31de 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -331,6 +331,20 @@ SWITCH_DECLARE(switch_time_t) switch_str_time(char *in) } +SWITCH_DECLARE(switch_status_t) switch_file_exists(const char *filename) +{ + int32_t wanted = APR_FINFO_TYPE; + apr_finfo_t info = {0}; + if (filename) { + apr_stat(&info, filename, wanted, NULL); + if (info.filetype != APR_NOFILE) { + return SWITCH_STATUS_SUCCESS; + } + } + return SWITCH_STATUS_FALSE; +} + + SWITCH_DECLARE(char *) switch_priority_name(switch_priority_t priority) { switch(priority) { /*lol*/