Merge pull request 'fix: Minecraft 1.20 crashing the semver parser' (#12) from fix/semver-crash-mc1.20 into main
All checks were successful
Publish to snapshot maven / build (push) Successful in 32s
All checks were successful
Publish to snapshot maven / build (push) Successful in 32s
Reviewed-on: #12 Reviewed-by: owlsys <owlsys@noreply.localhost> Reviewed-by: Ecorous <ecorous@outlook.com>
This commit is contained in:
commit
a0c7d27fec
|
@ -7,7 +7,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "dev.frogmc"
|
group = "dev.frogmc"
|
||||||
version = "0.0.1-alpha.14"
|
version = "0.0.1-alpha.15"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven {
|
maven {
|
||||||
|
|
|
@ -4,6 +4,6 @@ import java.io.IOException;
|
||||||
|
|
||||||
public class SemVerParseException extends IOException {
|
public class SemVerParseException extends IOException {
|
||||||
public SemVerParseException(String message) {
|
public SemVerParseException(String message) {
|
||||||
super("Failed to parse SemVer: " + message);
|
super("Failed to parse SemVer: `" + message + "`");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,12 +9,13 @@ import java.util.regex.Pattern;
|
||||||
import dev.frogmc.frogloader.api.mod.SemVer;
|
import dev.frogmc.frogloader.api.mod.SemVer;
|
||||||
import dev.frogmc.frogloader.impl.SemVerParseException;
|
import dev.frogmc.frogloader.impl.SemVerParseException;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public record SemVerImpl(int major, int minor, int patch, String prerelease, String build) implements SemVer {
|
public record SemVerImpl(int major, int minor, int patch, String prerelease, String build) implements SemVer {
|
||||||
// Adapted from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
// Adapted from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
||||||
private static final Pattern SEMVER_PATTERN = Pattern.compile("^(?<major>0|[1-9]\\d*)\\." +
|
private static final Pattern SEMVER_PATTERN = Pattern.compile("^(?<major>0|[1-9]\\d*)\\." +
|
||||||
"(?<minor>0|[1-9]\\d*)\\." +
|
"(?<minor>0|[1-9]\\d*)" +
|
||||||
"(?<patch>0|[1-9]\\d*)" +
|
"(\\.(?<patch>0|[1-9]\\d*))?" +
|
||||||
"(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)" +
|
"(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)" +
|
||||||
"(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" +
|
"(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" +
|
||||||
"(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$");
|
"(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$");
|
||||||
|
@ -27,7 +28,9 @@ public record SemVerImpl(int major, int minor, int patch, String prerelease, Str
|
||||||
|
|
||||||
int major = Integer.parseInt(matcher.group("major"));
|
int major = Integer.parseInt(matcher.group("major"));
|
||||||
int minor = Integer.parseInt(matcher.group("minor"));
|
int minor = Integer.parseInt(matcher.group("minor"));
|
||||||
int patch = Integer.parseInt(matcher.group("patch"));
|
// minecraft treats the `patch` component as optional...
|
||||||
|
@Nullable String patchString = matcher.group("patch");
|
||||||
|
int patch = patchString == null ? 0 : Integer.parseInt(patchString);
|
||||||
String prerelease = matcher.group("prerelease");
|
String prerelease = matcher.group("prerelease");
|
||||||
String buildmetadata = matcher.group("buildmetadata");
|
String buildmetadata = matcher.group("buildmetadata");
|
||||||
return new SemVerImpl(major, minor, patch, prerelease, buildmetadata);
|
return new SemVerImpl(major, minor, patch, prerelease, buildmetadata);
|
||||||
|
|
Loading…
Reference in a new issue