From 1cf06706be7408a84c7b2ef0530c7a6af51ee41a Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Fri, 23 Jun 2023 17:46:57 -0400 Subject: [PATCH] openbsd: fix NativeTargetInfo semver - supply ".0" as .Z component and satisfy semver X.Y.Z requirement - previously only X.Y was supplied and semver parse failed --- lib/std/zig/system/NativeTargetInfo.zig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/std/zig/system/NativeTargetInfo.zig b/lib/std/zig/system/NativeTargetInfo.zig index 66ab620622..29ef752d7a 100644 --- a/lib/std/zig/system/NativeTargetInfo.zig +++ b/lib/std/zig/system/NativeTargetInfo.zig @@ -132,7 +132,9 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo { std.os.KERN.OSRELEASE, }; var buf: [64]u8 = undefined; - var len: usize = buf.len; + // consider that sysctl result includes null-termination + // reserve 1 byte to ensure we never overflow when appending ".0" + var len: usize = buf.len - 1; std.os.sysctl(&mib, &buf, &len, null, 0) catch |err| switch (err) { error.NameTooLong => unreachable, // constant, known good value @@ -142,7 +144,12 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo { error.Unexpected => return error.OSVersionDetectionFail, }; - if (std.SemanticVersion.parse(buf[0 .. len - 1])) |ver| { + // append ".0" to satisfy semver + buf[len - 1] = '.'; + buf[len] = '0'; + len += 1; + + if (std.SemanticVersion.parse(buf[0..len])) |ver| { os.version_range.semver.min = ver; os.version_range.semver.max = ver; } else |_| {