From d3c22c5be011a0b57f463092792c91ae7b148b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Mon, 20 Jan 2025 12:00:54 +0100 Subject: [PATCH 1/2] Handle js_module_set_import_meta errors --- qjs.c | 11 +++++++++-- quickjs-libc.c | 15 ++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/qjs.c b/qjs.c index 7c6c4a4c5..4e4247d7a 100644 --- a/qjs.c +++ b/qjs.c @@ -87,7 +87,10 @@ static JSValue load_standalone_module(JSContext *ctx) JS_FreeValue(ctx, obj); goto exception; } - js_module_set_import_meta(ctx, obj, false, true); + if (js_module_set_import_meta(ctx, obj, false, true) < 0) { + JS_FreeValue(ctx, obj); + goto exception; + } val = JS_EvalFunction(ctx, JS_DupValue(ctx, obj)); val = js_std_await(ctx, val); @@ -116,7 +119,11 @@ static int eval_buf(JSContext *ctx, const void *buf, int buf_len, val = JS_Eval(ctx, buf, buf_len, filename, eval_flags | JS_EVAL_FLAG_COMPILE_ONLY); if (!JS_IsException(val)) { - js_module_set_import_meta(ctx, val, true, true); + if (js_module_set_import_meta(ctx, val, true, true) < 0) { + JS_FreeValue(ctx, val); + js_std_dump_error(ctx); + ret = -1; + } val = JS_EvalFunction(ctx, val); } val = js_std_await(ctx, val); diff --git a/quickjs-libc.c b/quickjs-libc.c index f62b216cd..494f5fdad 100644 --- a/quickjs-libc.c +++ b/quickjs-libc.c @@ -716,8 +716,10 @@ JSModuleDef *js_module_loader(JSContext *ctx, js_free(ctx, buf); if (JS_IsException(func_val)) return NULL; - /* XXX: could propagate the exception */ - js_module_set_import_meta(ctx, func_val, true, false); + if (js_module_set_import_meta(ctx, func_val, true, false) < 0) { + JS_FreeValue(ctx, func_val); + return NULL; + } /* the module is already referenced, so we must free it */ m = JS_VALUE_GET_PTR(func_val); JS_FreeValue(ctx, func_val); @@ -900,7 +902,8 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val, if (JS_ResolveModule(ctx, obj) < 0) return JS_EXCEPTION; - js_module_set_import_meta(ctx, obj, false, false); + if (js_module_set_import_meta(ctx, obj, false, false) < 0) + return JS_EXCEPTION; return JS_EvalFunction(ctx, obj); } @@ -4257,7 +4260,8 @@ void js_std_eval_binary(JSContext *ctx, const uint8_t *buf, size_t buf_len, goto exception; if (load_only) { if (JS_VALUE_GET_TAG(obj) == JS_TAG_MODULE) { - js_module_set_import_meta(ctx, obj, false, false); + if (js_module_set_import_meta(ctx, obj, false, false) < 0) + goto exception; } } else { if (JS_VALUE_GET_TAG(obj) == JS_TAG_MODULE) { @@ -4265,7 +4269,8 @@ void js_std_eval_binary(JSContext *ctx, const uint8_t *buf, size_t buf_len, JS_FreeValue(ctx, obj); goto exception; } - js_module_set_import_meta(ctx, obj, false, true); + if (js_module_set_import_meta(ctx, obj, false, true) < 0) + goto exception; val = JS_EvalFunction(ctx, obj); val = js_std_await(ctx, val); } else { From 29faa2407aed7d0f98f70ff04ce28d969b1e2cf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Tue, 21 Jan 2025 10:16:11 +0100 Subject: [PATCH 2/2] fixup! --- qjs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qjs.c b/qjs.c index 4e4247d7a..fb5d53a46 100644 --- a/qjs.c +++ b/qjs.c @@ -120,9 +120,9 @@ static int eval_buf(JSContext *ctx, const void *buf, int buf_len, eval_flags | JS_EVAL_FLAG_COMPILE_ONLY); if (!JS_IsException(val)) { if (js_module_set_import_meta(ctx, val, true, true) < 0) { - JS_FreeValue(ctx, val); js_std_dump_error(ctx); ret = -1; + goto end; } val = JS_EvalFunction(ctx, val); } @@ -136,6 +136,7 @@ static int eval_buf(JSContext *ctx, const void *buf, int buf_len, } else { ret = 0; } +end: JS_FreeValue(ctx, val); return ret; }