| ... | ... | @@ -132,7 +132,9 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo { |
| 132 | 132 | std.os.KERN.OSRELEASE, |
| 133 | 133 | }; |
| 134 | 134 | var buf: [64]u8 = undefined; |
| 135 | | var len: usize = buf.len; |
| 135 | // consider that sysctl result includes null-termination |
| 136 | // reserve 1 byte to ensure we never overflow when appending ".0" |
| 137 | var len: usize = buf.len - 1; |
| 136 | 138 | |
| 137 | 139 | std.os.sysctl(&mib, &buf, &len, null, 0) catch |err| switch (err) { |
| 138 | 140 | error.NameTooLong => unreachable, // constant, known good value |
| ... | ... | @@ -142,7 +144,12 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo { |
| 142 | 144 | error.Unexpected => return error.OSVersionDetectionFail, |
| 143 | 145 | }; |
| 144 | 146 | |
| 145 | | if (std.SemanticVersion.parse(buf[0 .. len - 1])) |ver| { |
| 147 | // append ".0" to satisfy semver |
| 148 | buf[len - 1] = '.'; |
| 149 | buf[len] = '0'; |
| 150 | len += 1; |
| 151 | |
| 152 | if (std.SemanticVersion.parse(buf[0..len])) |ver| { |
| 146 | 153 | os.version_range.semver.min = ver; |
| 147 | 154 | os.version_range.semver.max = ver; |
| 148 | 155 | } else |_| { |