Skip to content

Commit a2c7abf

Browse files
committed
Don't use strndup()
1 parent 05a63f8 commit a2c7abf

File tree

1 file changed

+34
-18
lines changed

1 file changed

+34
-18
lines changed

src/js.c

+34-18
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ js_create_platform(uv_loop_t *loop, const js_platform_options_t *options, js_pla
211211
js_platform_t *platform = malloc(sizeof(js_platform_t));
212212

213213
platform->loop = loop;
214-
platform->options = options ? *options : (js_platform_options_t){};
214+
platform->options = options ? *options : (js_platform_options_t) {};
215215

216216
*result = platform;
217217

@@ -304,7 +304,7 @@ js__on_delegate_finalize(JSRuntime *runtime, JSValue value);
304304
static JSClassDef js_delegate_class = {
305305
.class_name = "Delegate",
306306
.finalizer = js__on_delegate_finalize,
307-
.exotic = &(JSClassExoticMethods){
307+
.exotic = &(JSClassExoticMethods) {
308308
.get_own_property = js__on_delegate_get_own_property,
309309
.get_own_property_names = js__on_delegate_get_own_property_names,
310310
.delete_property = js__on_delegate_delete_property,
@@ -405,7 +405,7 @@ js__on_uncaught_exception(JSContext *context, JSValue error) {
405405

406406
env->callbacks.uncaught_exception(
407407
env,
408-
&(js_value_t){error},
408+
&(js_value_t) {error},
409409
env->callbacks.uncaught_exception_data
410410
);
411411

@@ -431,8 +431,8 @@ js__on_unhandled_rejection(JSContext *context, JSValue promise, JSValue reason)
431431

432432
env->callbacks.unhandled_rejection(
433433
env,
434-
&(js_value_t){reason},
435-
&(js_value_t){promise},
434+
&(js_value_t) {reason},
435+
&(js_value_t) {promise},
436436
env->callbacks.unhandled_rejection_data
437437
);
438438

@@ -607,7 +607,7 @@ js_create_env(uv_loop_t *loop, js_platform_t *platform, const js_env_options_t *
607607
int err;
608608

609609
JSRuntime *runtime = JS_NewRuntime2(
610-
&(JSMallocFunctions){
610+
&(JSMallocFunctions) {
611611
.js_calloc = js__on_calloc,
612612
.js_malloc = js__on_malloc,
613613
.js_free = js__on_free,
@@ -619,7 +619,7 @@ js_create_env(uv_loop_t *loop, js_platform_t *platform, const js_env_options_t *
619619

620620
JS_SetSharedArrayBufferFunctions(
621621
runtime,
622-
&(JSSharedArrayBufferFunctions){
622+
&(JSSharedArrayBufferFunctions) {
623623
.sab_alloc = js__on_shared_malloc,
624624
.sab_free = js__on_shared_free,
625625
.sab_dup = js__on_shared_dup,
@@ -994,10 +994,18 @@ js_create_module(js_env_t *env, const char *name, size_t len, int offset, js_val
994994
module->source = JS_DupValue(env->context, source->value);
995995
module->bytecode = JS_NULL;
996996
module->definition = NULL;
997-
module->name = strndup(name, len);
998997
module->meta = cb;
999998
module->meta_data = data;
1000999

1000+
if (len == (size_t) -1) {
1001+
module->name = strdup(name);
1002+
} else {
1003+
module->name = malloc(len + 1);
1004+
module->name[len] = '\0';
1005+
1006+
memcpy(module->name, name, len);
1007+
}
1008+
10011009
*result = module;
10021010

10031011
return 0;
@@ -1037,10 +1045,18 @@ js_create_synthetic_module(js_env_t *env, const char *name, size_t len, js_value
10371045
module->source = JS_NULL;
10381046
module->bytecode = JS_NULL;
10391047
module->definition = JS_NewCModule(env->context, name, js__on_evaluate_module);
1040-
module->name = strndup(name, len);
10411048
module->meta = NULL;
10421049
module->meta_data = NULL;
10431050

1051+
if (len == (size_t) -1) {
1052+
module->name = strdup(name);
1053+
} else {
1054+
module->name = malloc(len + 1);
1055+
module->name[len] = '\0';
1056+
1057+
memcpy(module->name, name, len);
1058+
}
1059+
10441060
for (size_t i = 0; i < names_len; i++) {
10451061
const char *str = JS_ToCString(env->context, export_names[i]->value);
10461062

@@ -1181,7 +1197,7 @@ js_run_module(js_env_t *env, js_module_t *module, js_value_t **result) {
11811197
if (module->meta) {
11821198
JSValue meta = JS_GetImportMeta(env->context, module->definition);
11831199

1184-
module->meta(env, module, &(js_value_t){meta}, module->meta_data);
1200+
module->meta(env, module, &(js_value_t) {meta}, module->meta_data);
11851201

11861202
JS_FreeValue(env->context, meta);
11871203

@@ -1192,7 +1208,7 @@ js_run_module(js_env_t *env, js_module_t *module, js_value_t **result) {
11921208
err = js_create_promise(env, &deferred, result);
11931209
if (err < 0) return err;
11941210

1195-
js_reject_deferred(env, deferred, &(js_value_t){error});
1211+
js_reject_deferred(env, deferred, &(js_value_t) {error});
11961212

11971213
JS_FreeValue(env->context, error);
11981214

@@ -1217,7 +1233,7 @@ js_run_module(js_env_t *env, js_module_t *module, js_value_t **result) {
12171233
err = js_create_promise(env, &deferred, result);
12181234
if (err < 0) return err;
12191235

1220-
js_reject_deferred(env, deferred, &(js_value_t){error});
1236+
js_reject_deferred(env, deferred, &(js_value_t) {error});
12211237

12221238
JS_FreeValue(env->context, error);
12231239

@@ -1498,7 +1514,7 @@ js_define_class(js_env_t *env, const char *name, size_t len, js_function_cb cons
14981514
}
14991515
}
15001516

1501-
err = js_define_properties(env, &(js_value_t){prototype}, instance_properties, instance_properties_len);
1517+
err = js_define_properties(env, &(js_value_t) {prototype}, instance_properties, instance_properties_len);
15021518
assert(err == 0);
15031519

15041520
free(instance_properties);
@@ -1515,7 +1531,7 @@ js_define_class(js_env_t *env, const char *name, size_t len, js_function_cb cons
15151531
}
15161532
}
15171533

1518-
err = js_define_properties(env, &(js_value_t){class}, static_properties, static_properties_len);
1534+
err = js_define_properties(env, &(js_value_t) {class}, static_properties, static_properties_len);
15191535
assert(err == 0);
15201536

15211537
free(static_properties);
@@ -1700,7 +1716,7 @@ js__on_delegate_get_own_property(JSContext *context, JSPropertyDescriptor *descr
17001716
if (delegate->callbacks.has) {
17011717
JSValue property = JS_AtomToValue(env->context, name);
17021718

1703-
bool exists = delegate->callbacks.has(env, &(js_value_t){property}, delegate->data);
1719+
bool exists = delegate->callbacks.has(env, &(js_value_t) {property}, delegate->data);
17041720

17051721
JS_FreeValue(env->context, property);
17061722

@@ -1712,7 +1728,7 @@ js__on_delegate_get_own_property(JSContext *context, JSPropertyDescriptor *descr
17121728
if (delegate->callbacks.get) {
17131729
JSValue property = JS_AtomToValue(env->context, name);
17141730

1715-
js_value_t *result = delegate->callbacks.get(env, &(js_value_t){property}, delegate->data);
1731+
js_value_t *result = delegate->callbacks.get(env, &(js_value_t) {property}, delegate->data);
17161732

17171733
JS_FreeValue(env->context, property);
17181734

@@ -1781,7 +1797,7 @@ js__on_delegate_delete_property(JSContext *context, JSValueConst object, JSAtom
17811797
if (delegate->callbacks.delete_property) {
17821798
JSValue property = JS_AtomToValue(env->context, name);
17831799

1784-
bool success = delegate->callbacks.delete_property(env, &(js_value_t){property}, delegate->data);
1800+
bool success = delegate->callbacks.delete_property(env, &(js_value_t) {property}, delegate->data);
17851801

17861802
JS_FreeValue(env->context, property);
17871803

@@ -1802,7 +1818,7 @@ js__on_delegate_set_property(JSContext *context, JSValueConst object, JSAtom nam
18021818
if (delegate->callbacks.set) {
18031819
JSValue property = JS_AtomToValue(env->context, name);
18041820

1805-
bool success = delegate->callbacks.set(env, &(js_value_t){property}, &(js_value_t){value}, delegate->data);
1821+
bool success = delegate->callbacks.set(env, &(js_value_t) {property}, &(js_value_t) {value}, delegate->data);
18061822

18071823
JS_FreeValue(env->context, property);
18081824

0 commit comments

Comments
 (0)