@@ -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