Skip to content

Commit f101f3f

Browse files
gnodetclaude
andauthored
Fix #12086: filter transitive repos and deps with uninterpolated expressions (#12088)
After populateResult() in DefaultArtifactDescriptorReader, filter out repositories with uninterpolated IDs/URLs and dependencies with uninterpolated groupId/artifactId/version. This is defense-in-depth on top of the mergeRepositories filter in DefaultModelBuilder (commit 9332ad3), catching entries that reach the artifact descriptor reader through any code path. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8115238 commit f101f3f

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

impl/maven-impl/src/main/java/org/apache/maven/impl/resolver/DefaultArtifactDescriptorReader.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ public ArtifactDescriptorResult readArtifactDescriptor(
121121
Model model = loadPom(session, request, result);
122122
if (model != null) {
123123
populateResult(InternalSession.from(session), result, model);
124+
filterUninterpolated(result);
124125
}
125126

126127
return result;
@@ -436,6 +437,36 @@ private static boolean hasUninterpolatedExpression(org.apache.maven.api.model.De
436437
|| containsPlaceholder(dependency.getVersion());
437438
}
438439

440+
private void filterUninterpolated(ArtifactDescriptorResult result) {
441+
result.getRepositories().removeIf(repo -> {
442+
if (containsPlaceholder(repo.getId()) || containsPlaceholder(repo.getUrl())) {
443+
logger.debug("Filtered repository with uninterpolated expression: {}", repo);
444+
return true;
445+
}
446+
return false;
447+
});
448+
result.getDependencies().removeIf(dep -> {
449+
if (hasUninterpolatedExpression(dep.getArtifact())) {
450+
logger.debug("Filtered dependency with uninterpolated expression: {}", dep);
451+
return true;
452+
}
453+
return false;
454+
});
455+
result.getManagedDependencies().removeIf(dep -> {
456+
if (hasUninterpolatedExpression(dep.getArtifact())) {
457+
logger.debug("Filtered managed dependency with uninterpolated expression: {}", dep);
458+
return true;
459+
}
460+
return false;
461+
});
462+
}
463+
464+
private static boolean hasUninterpolatedExpression(Artifact artifact) {
465+
return containsPlaceholder(artifact.getGroupId())
466+
|| containsPlaceholder(artifact.getArtifactId())
467+
|| containsPlaceholder(artifact.getVersion());
468+
}
469+
439470
private static boolean containsPlaceholder(String value) {
440471
return value != null && value.contains("${");
441472
}

0 commit comments

Comments
 (0)