aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-01-22 16:21:45 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-01-22 16:21:45 -0800
commit56ae4bcb55798fba374ec9dc5f387bb0a2584714 (patch)
tree747f34bea29177c6deeb9022de9b990c4244a709
parentec61dc0665dcb7029d407aa3286bac6245f3419a (diff)
downloadbun-56ae4bcb55798fba374ec9dc5f387bb0a2584714.tar.gz
bun-56ae4bcb55798fba374ec9dc5f387bb0a2584714.tar.zst
bun-56ae4bcb55798fba374ec9dc5f387bb0a2584714.zip
Ensure we allocate the correct number of argv
-rw-r--r--src/javascript/jsc/node/types.zig27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/javascript/jsc/node/types.zig b/src/javascript/jsc/node/types.zig
index 7e4927e78..922f51b27 100644
--- a/src/javascript/jsc/node/types.zig
+++ b/src/javascript/jsc/node/types.zig
@@ -1980,24 +1980,33 @@ pub const Process = struct {
JSC.VirtualMachine.vm.argv.len > 1 and (strings.eqlComptime(JSC.VirtualMachine.vm.argv[0], "run") or strings.eqlComptime(JSC.VirtualMachine.vm.argv[0], "wiptest")),
));
- const count = JSC.VirtualMachine.vm.argv.len + 1;
var args = allocator.alloc(
JSC.ZigString,
- count - skip,
+ JSC.VirtualMachine.vm.argv.len + 1,
) catch unreachable;
+ var args_list = std.ArrayListUnmanaged(JSC.ZigString){ .items = args, .capacity = args.len };
+ args_list.items.len = 0;
defer allocator.free(args);
-
- // https://github.com/yargs/yargs/blob/adb0d11e02c613af3d9427b3028cc192703a3869/lib/utils/process-argv.ts#L1
- args[0] = JSC.ZigString.init(std.mem.span(std.os.argv[0]));
+ {
+ var args_iterator = std.process.args();
+
+ if (args_iterator.nextPosix()) |arg0| {
+ var argv0 = JSC.ZigString.init(std.mem.span(arg0));
+ argv0.detectEncoding();
+ // https://github.com/yargs/yargs/blob/adb0d11e02c613af3d9427b3028cc192703a3869/lib/utils/process-argv.ts#L1
+ args_list.appendAssumeCapacity(argv0);
+ }
+ }
if (JSC.VirtualMachine.vm.argv.len > skip) {
- for (JSC.VirtualMachine.vm.argv[skip..]) |arg, i| {
- args[i + skip] = JSC.ZigString.init(arg);
- args[i + skip].detectEncoding();
+ for (JSC.VirtualMachine.vm.argv[skip..]) |arg| {
+ var str = JSC.ZigString.init(arg);
+ str.detectEncoding();
+ args_list.appendAssumeCapacity(str);
}
}
- return JSC.JSValue.createStringArray(globalObject, args.ptr, args.len, true);
+ return JSC.JSValue.createStringArray(globalObject, args_list.items.ptr, args_list.items.len, true);
}
pub fn getCwd(globalObject: *JSC.JSGlobalObject) callconv(.C) JSC.JSValue {