diff options
author | 2022-01-22 16:21:45 -0800 | |
---|---|---|
committer | 2022-01-22 16:21:45 -0800 | |
commit | 56ae4bcb55798fba374ec9dc5f387bb0a2584714 (patch) | |
tree | 747f34bea29177c6deeb9022de9b990c4244a709 | |
parent | ec61dc0665dcb7029d407aa3286bac6245f3419a (diff) | |
download | bun-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.zig | 27 |
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 { |