diff options
author | 2022-09-17 00:21:10 -0700 | |
---|---|---|
committer | 2022-09-17 00:21:10 -0700 | |
commit | c2f64d4da1a7b037961191124726a9a5865707db (patch) | |
tree | 1278e494cef4493ad10ce61793a6d3f2e55be070 /src/install/install.zig | |
parent | 9b941dd800df51237815f3c0671c195c04fad1db (diff) | |
download | bun-c2f64d4da1a7b037961191124726a9a5865707db.tar.gz bun-c2f64d4da1a7b037961191124726a9a5865707db.tar.zst bun-c2f64d4da1a7b037961191124726a9a5865707db.zip |
Fix crash when specifying same package name twice in `bun add`
Fixes https://github.com/oven-sh/bun/issues/1202
Diffstat (limited to '')
-rw-r--r-- | src/install/install.zig | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/install/install.zig b/src/install/install.zig index e4bbccb7d..38d800c41 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -4280,7 +4280,7 @@ pub const PackageManager = struct { // first one is always either: // add // remove - for (positionals) |positional| { + outer: for (positionals) |positional| { var request = UpdateRequest{ .name = positional, }; @@ -4325,6 +4325,11 @@ pub const PackageManager = struct { request.name = std.mem.trim(u8, request.name, "\n\r\t"); if (request.name.len == 0) continue; + request.name_hash = String.Builder.stringHash(request.name); + for (update_requests.constSlice()) |*prev| { + if (prev.name_hash == request.name_hash and request.name.len == prev.name.len) continue :outer; + } + request.version_buf = std.mem.trim(u8, request.version_buf, "\n\r\t"); // https://github.com/npm/npm-package-arg/blob/fbaf2fd0b72a0f38e7c24260fd4504f4724c9466/npa.js#L330 @@ -4354,7 +4359,7 @@ pub const PackageManager = struct { const sliced = SlicedString.init(request.version_buf, request.version_buf); request.version = Dependency.parse(allocator, request.version_buf, &sliced, log) orelse Dependency.Version{}; } - request.name_hash = String.Builder.stringHash(request.name); + update_requests.append(request) catch break; } |