Ensure that workers in fuzzers can create their own context
Inspired by qjs, a new helper method was added to create the JS context, that can be reused to create context in workers, too.
This commit is contained in:
parent
012451d5f3
commit
99882ef128
4 changed files with 20 additions and 8 deletions
|
@ -28,24 +28,35 @@ void reset_nbinterrupts() {
|
||||||
nbinterrupts = 0;
|
nbinterrupts = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSContext *JS_NewCustomContext(JSRuntime *rt)
|
||||||
|
{
|
||||||
|
JSContext *ctx = JS_NewContext(rt);
|
||||||
|
if (!ctx)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
JS_AddIntrinsicBigFloat(ctx);
|
||||||
|
JS_AddIntrinsicBigDecimal(ctx);
|
||||||
|
JS_AddIntrinsicOperators(ctx);
|
||||||
|
JS_EnableBignumExt(ctx, 1);
|
||||||
|
|
||||||
|
js_init_module_std(ctx, "std");
|
||||||
|
js_init_module_os(ctx, "os");
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
void test_one_input_init(JSRuntime *rt, JSContext *ctx) {
|
void test_one_input_init(JSRuntime *rt, JSContext *ctx) {
|
||||||
// 64 Mo
|
// 64 Mo
|
||||||
JS_SetMemoryLimit(rt, 0x4000000);
|
JS_SetMemoryLimit(rt, 0x4000000);
|
||||||
// 64 Kb
|
// 64 Kb
|
||||||
JS_SetMaxStackSize(rt, 0x10000);
|
JS_SetMaxStackSize(rt, 0x10000);
|
||||||
|
|
||||||
JS_AddIntrinsicBigFloat(ctx);
|
|
||||||
JS_AddIntrinsicBigDecimal(ctx);
|
|
||||||
JS_AddIntrinsicOperators(ctx);
|
|
||||||
JS_EnableBignumExt(ctx, 1);
|
|
||||||
JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);
|
JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);
|
||||||
JS_SetInterruptHandler(JS_GetRuntime(ctx), interrupt_handler, NULL);
|
JS_SetInterruptHandler(JS_GetRuntime(ctx), interrupt_handler, NULL);
|
||||||
|
js_std_set_worker_new_context_func(JS_NewCustomContext);
|
||||||
js_std_add_helpers(ctx, 0, NULL);
|
js_std_add_helpers(ctx, 0, NULL);
|
||||||
|
|
||||||
// Load os and std
|
// Load os and std
|
||||||
js_std_init_handlers(rt);
|
js_std_init_handlers(rt);
|
||||||
js_init_module_std(ctx, "std");
|
|
||||||
js_init_module_os(ctx, "os");
|
|
||||||
const char *str = "import * as std from 'std';\n"
|
const char *str = "import * as std from 'std';\n"
|
||||||
"import * as os from 'os';\n"
|
"import * as os from 'os';\n"
|
||||||
"globalThis.std = std;\n"
|
"globalThis.std = std;\n"
|
||||||
|
|
|
@ -18,5 +18,6 @@
|
||||||
|
|
||||||
static int nbinterrupts = 0;
|
static int nbinterrupts = 0;
|
||||||
|
|
||||||
|
JSContext *JS_NewCustomContext(JSRuntime *rt);
|
||||||
void reset_nbinterrupts();
|
void reset_nbinterrupts();
|
||||||
void test_one_input_init(JSRuntime *rt, JSContext *ctx);
|
void test_one_input_init(JSRuntime *rt, JSContext *ctx);
|
||||||
|
|
|
@ -27,7 +27,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
JSRuntime *rt = JS_NewRuntime();
|
JSRuntime *rt = JS_NewRuntime();
|
||||||
JSContext *ctx = JS_NewContext(rt);
|
JSContext *ctx = JS_NewCustomContext(rt);
|
||||||
test_one_input_init(rt, ctx);
|
test_one_input_init(rt, ctx);
|
||||||
|
|
||||||
uint8_t *null_terminated_data = malloc(size + 1);
|
uint8_t *null_terminated_data = malloc(size + 1);
|
||||||
|
|
|
@ -26,7 +26,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
JSRuntime *rt = JS_NewRuntime();
|
JSRuntime *rt = JS_NewRuntime();
|
||||||
JSContext *ctx = JS_NewContext(rt);
|
JSContext *ctx = JS_NewCustomContext(rt);
|
||||||
test_one_input_init(rt, ctx);
|
test_one_input_init(rt, ctx);
|
||||||
|
|
||||||
uint8_t *null_terminated_data = malloc(size + 1);
|
uint8_t *null_terminated_data = malloc(size + 1);
|
||||||
|
|
Loading…
Reference in a new issue