]> git.kaiwu.me - njs.git/commitdiff
QuickJS: disabling eval() and string normalize.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 21 Jun 2024 07:06:46 +0000 (00:06 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Tue, 2 Jul 2024 02:35:15 +0000 (19:35 -0700)
external/njs_shell.c
src/qjs.c
src/qjs.h

index e00f2529bb32cb705c08ca7d721e3a19256cb420..672215c18583c422a40b83d2194cf400e635a0c7 100644 (file)
@@ -2811,7 +2811,7 @@ njs_engine_qjs_init(njs_engine_t *engine, njs_opts_t *opts)
         return NJS_ERROR;
     }
 
-    engine->u.qjs.ctx = qjs_new_context(engine->u.qjs.rt);
+    engine->u.qjs.ctx = qjs_new_context(engine->u.qjs.rt, 1);
     if (engine->u.qjs.ctx == NULL) {
         njs_stderror("JS_NewContext() failed\n");
         return NJS_ERROR;
index 83b43ad71dbe9b38f8ceba43e44b07494f789b7c..0a31b748d3100fc8d88fe0947ded59af56df178f 100644 (file)
--- a/src/qjs.c
+++ b/src/qjs.c
@@ -8,16 +8,30 @@
 
 
 JSContext *
-qjs_new_context(JSRuntime *rt)
+qjs_new_context(JSRuntime *rt, _Bool eval)
 {
     JSContext     *ctx;
     qjs_module_t  **module;
 
-    ctx = JS_NewContext(rt);
+    ctx = JS_NewContextRaw(rt);
     if (ctx == NULL) {
         return NULL;
     }
 
+    JS_AddIntrinsicBaseObjects(ctx);
+    JS_AddIntrinsicDate(ctx);
+    JS_AddIntrinsicRegExp(ctx);
+    JS_AddIntrinsicJSON(ctx);
+    JS_AddIntrinsicProxy(ctx);
+    JS_AddIntrinsicMapSet(ctx);
+    JS_AddIntrinsicTypedArrays(ctx);
+    JS_AddIntrinsicPromise(ctx);
+    JS_AddIntrinsicBigInt(ctx);
+
+    if (eval) {
+        JS_AddIntrinsicEval(ctx);
+    }
+
     for (module = qjs_modules; *module != NULL; module++) {
         if ((*module)->init(ctx, (*module)->name) == NULL) {
             return NULL;
index 2307d4d9daaae0e6baeb8ab13baf7662b8260eb2..71e23d788fc33ec077a98de7db571dbe763257be 100644 (file)
--- a/src/qjs.h
+++ b/src/qjs.h
@@ -39,7 +39,7 @@ typedef struct {
 } qjs_module_t;
 
 
-JSContext *qjs_new_context(JSRuntime *rt);
+JSContext *qjs_new_context(JSRuntime *rt, _Bool eval);
 
 
 JSValue qjs_buffer_alloc(JSContext *ctx, size_t size);