From 7a9a112108d8c37f1c611985581f94ca106faea0 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Sun, 9 Oct 2011 08:59:34 +0000 Subject: [PATCH] eval needs a global object as root... place this in a separate compartment. --- src/sbbs3/js_internal.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c index 2c0b4cbaac..4887df5231 100644 --- a/src/sbbs3/js_internal.c +++ b/src/sbbs3/js_internal.c @@ -242,6 +242,14 @@ js_CommonBranchCallback(JSContext *cx, js_branch_t* branch) return(JS_TRUE); } +static JSClass eval_class = { + "Global", /* name */ + JSCLASS_GLOBAL_FLAGS, /* flags */ + JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub, + JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, + JSCLASS_NO_OPTIONAL_MEMBERS +}; + /* Execute a string in its own context (away from Synchronet objects) */ static JSBool js_eval(JSContext *parent_cx, uintN argc, jsval *arglist) @@ -291,7 +299,7 @@ js_eval(JSContext *parent_cx, uintN argc, jsval *arglist) #endif #endif - if((obj=JS_NewObject(cx, NULL, NULL, NULL))==NULL + if((obj=JS_NewCompartmentAndGlobalObject(cx, &eval_class, NULL))==NULL || !JS_InitStandardClasses(cx,obj)) { JS_DestroyContext(cx); return(JS_FALSE); -- GitLab