Skip to content

Commit 331438e

Browse files
authored
Make version guessing more robust, and error messages more informative. (#38)
1 parent f59da69 commit 331438e

2 files changed

Lines changed: 42 additions & 11 deletions

File tree

.gitignore

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1+
#eclipse
2+
**/bin
3+
**/.settings
4+
**/.classpath
5+
*.project
16

2-
/.gradle/
3-
/build/
4-
/.idea/
7+
#idea
8+
/.idea
9+
/*/out
10+
/classes
11+
*.iml
12+
13+
#gradle
14+
/build
15+
/.gradle
16+
/*/build
17+
/*/.gradle
18+
19+
#misc
520
/out/
621
/forge-1.16.5-36.1.16.jar
722
/tmp/
8-
/bin/
9-
/.settings/
10-
/.classpath
11-
/.project
1223
/repo/
1324
/Bookshelf-1.16.4-9.0.7-TAMPERED.jar
1425
/Bookshelf-1.16.4-9.0.7-UNTAMPERED.jar
1526
/inventorysorter-1.16.1-18.0.0.jar
1627
/modlauncher-9.0.1.jar
1728
/test.jar
18-
/sjh-jmh/build/
1929
*.jfr

src/main/java/cpw/mods/jarhandling/JarMetadata.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,13 @@ static SimpleJarMetadata fromFileName(final Path path, final Set<String> pkgs, f
6565
var ver = versionMaybe.getFileName().toString();
6666
var mat = MODULE_VERSION.matcher(ver);
6767
if (mat.find()) {
68-
ver = ModuleDescriptor.Version.parse(ver.substring(mat.start())).toString();
68+
var potential = ver.substring(mat.start());
69+
ver = safeParseVersion(potential, path.getFileName().toString());
6970
return new SimpleJarMetadata(cleanModuleName(name), ver, pkgs, providers);
7071
} else {
7172
return new SimpleJarMetadata(cleanModuleName(name), null, pkgs, providers);
7273
}
73-
}
74+
}
7475
}
7576
}
7677

@@ -83,14 +84,34 @@ static SimpleJarMetadata fromFileName(final Path path, final Set<String> pkgs, f
8384

8485
var mat = DASH_VERSION.matcher(fn);
8586
if (mat.find()) {
86-
var ver = ModuleDescriptor.Version.parse(fn.substring(mat.start() + 1)).toString();
87+
var potential = fn.substring(mat.start() + 1);
88+
var ver = safeParseVersion(potential, path.getFileName().toString());
8789
var name = mat.replaceAll("");
8890
return new SimpleJarMetadata(cleanModuleName(name), ver, pkgs, providers);
8991
} else {
9092
return new SimpleJarMetadata(cleanModuleName(fn), null, pkgs, providers);
9193
}
9294
}
9395

96+
private static String safeParseVersion(String ver, String filename) {
97+
try {
98+
var len = ver.length();
99+
if (len == 0)
100+
throw new IllegalArgumentException("Error parsing version info from " + filename + ": Empty Version String");
101+
102+
var last = ver.charAt(len - 1);
103+
if (last == '.' || last == '+' || last == '-') { //Attempt to filter out the common wrong file names.
104+
if (len == 1)
105+
throw new IllegalArgumentException("Error parsing version info from " + filename + ": Invalid version \"" + ver + "\"");
106+
ver = ver.substring(0, len - 1);
107+
}
108+
109+
return ModuleDescriptor.Version.parse(ver).toString();
110+
} catch (IllegalArgumentException e) {
111+
throw new IllegalArgumentException("Error parsing version info from " + filename + " (" + ver + "): " + e.getMessage(), e);
112+
}
113+
}
114+
94115
private static String cleanModuleName(String mn) {
95116

96117
// replace non-alphanumeric

0 commit comments

Comments
 (0)