Skip to content

Commit 54e3e24

Browse files
authored
Gracefully handle malformed Maven version strings (#7234)
* Gracefully handle malformed Maven version strings Fix NumberFormatException when encountering malformed version strings like `-captain-daily-SNAPSHOT` in Maven repository metadata. Fixes #7233 * Remove VersionTest (covered by VersionRequirementTest)
1 parent f136dfb commit 54e3e24

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

rewrite-maven/src/main/java/org/openrewrite/maven/internal/VersionRequirement.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,12 @@ public String toString() {
258258
VersionSpec hardRequirement = nearestHardRequirement.versionSpec;
259259
Version latest = null;
260260
for (String availableVersion : availableVersions.call()) {
261-
Version version = new Version(availableVersion);
261+
Version version;
262+
try {
263+
version = new Version(availableVersion);
264+
} catch (IllegalArgumentException e) {
265+
continue;
266+
}
262267

263268
if ((hardRequirement instanceof DynamicVersion && ((DynamicVersion) hardRequirement).matches(version)) ||
264269
(hardRequirement instanceof RangeSet && ((RangeSet) hardRequirement).matches(version))) {

rewrite-maven/src/main/java/org/openrewrite/maven/tree/Version.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public boolean next() {
275275
} else {
276276
this.tokenStart = 0;
277277
this.tokenEnd = 1;
278-
this.number = true;
278+
this.number = false;
279279
}
280280

281281
return true;

rewrite-maven/src/test/java/org/openrewrite/maven/internal/VersionRequirementTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ private Iterable<String> available() {
2626
return List.of("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
2727
}
2828

29+
private Iterable<String> availableWithMalformed() {
30+
return List.of("1", "-captain-daily-SNAPSHOT", "2", "3");
31+
}
32+
2933
@Test
3034
void rangeSet() throws Exception {
3135
assertThat(VersionRequirement.fromVersion("[1,11)", 0).resolve(this::available))
@@ -64,4 +68,10 @@ void emptyUnboundedRange() throws Exception {
6468
assertThat(VersionRequirement.fromVersion("(,)", 0).resolve(this::available))
6569
.isEqualTo("10");
6670
}
71+
72+
@Test
73+
void malformedVersionsAreSkipped() throws Exception {
74+
assertThat(VersionRequirement.fromVersion("[1,4)", 0).resolve(this::availableWithMalformed))
75+
.isEqualTo("3");
76+
}
6777
}

0 commit comments

Comments
 (0)