From 80c74f0e9af8d6b7cd42c517d975ea4688985565 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 23 Jun 2025 23:03:37 +0000 Subject: [PATCH] Fix semver prerelease identifier handling for empty/falsy values --- src/semver/Version.zig | 12 ++++++++---- test/cli/install/semver.test.ts | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/semver/Version.zig b/src/semver/Version.zig index 876a43b5f8..e3546863e6 100644 --- a/src/semver/Version.zig +++ b/src/semver/Version.zig @@ -326,18 +326,21 @@ pub const Version = extern struct { new_version.major +|= 1; new_version.minor = 0; new_version.patch = 0; - try pre_strings.writer().print("{s}.0", .{identifier orelse "0"}); + const id = if (identifier) |i| if (i.len > 0) i else "0" else "0"; + try pre_strings.writer().print("{s}.0", .{id}); new_version.tag.pre = ExternalString.from(pre_strings.items); }, .preminor => { new_version.minor +|= 1; new_version.patch = 0; - try pre_strings.writer().print("{s}.0", .{identifier orelse "0"}); + const id = if (identifier) |i| if (i.len > 0) i else "0" else "0"; + try pre_strings.writer().print("{s}.0", .{id}); new_version.tag.pre = ExternalString.from(pre_strings.items); }, .prepatch => { new_version.patch +|= 1; - try pre_strings.writer().print("{s}.0", .{identifier orelse "0"}); + const id = if (identifier) |i| if (i.len > 0) i else "0" else "0"; + try pre_strings.writer().print("{s}.0", .{id}); new_version.tag.pre = ExternalString.from(pre_strings.items); }, .release => { @@ -347,7 +350,8 @@ pub const Version = extern struct { if (!new_version.tag.hasPre()) { // Same as prepatch new_version.patch +|= 1; - try pre_strings.writer().print("{s}.0", .{identifier orelse "0"}); + const id = if (identifier) |i| if (i.len > 0) i else "0" else "0"; + try pre_strings.writer().print("{s}.0", .{id}); new_version.tag.pre = ExternalString.from(pre_strings.items); } else { // Increment existing prerelease diff --git a/test/cli/install/semver.test.ts b/test/cli/install/semver.test.ts index 868ee6548a..ee275ab70f 100644 --- a/test/cli/install/semver.test.ts +++ b/test/cli/install/semver.test.ts @@ -1178,7 +1178,7 @@ describe("Bun.semver negative tests", () => { // Note: non-string identifiers are converted to strings expect(Bun.semver.bump("1.2.3", "prerelease", 123 as any)).toBe("1.2.4-123.0"); expect(Bun.semver.bump("1.2.3", "prerelease", {} as any)).toBe("1.2.4-[object Object].0"); - expect(Bun.semver.bump("1.2.3", "prerelease", [] as any)).toBe("1.2.4-.0"); + expect(Bun.semver.bump("1.2.3", "prerelease", [] as any)).toBe("1.2.4-0.0"); expect(Bun.semver.bump("1.2.3", "prerelease", true as any)).toBe("1.2.4-true.0"); }); });