java-topology/defects/maven/patch/maven-0001-standard-lifecycle-set.patch

28 lines
1.5 KiB
Diff

# UNDF: UNDF-2026-000000163
--- a/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
@@ -1,6 +1,7 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -44,6 +45,10 @@ public class DefaultLifecycleExecutionPlanCalculator implements LifecycleExecuti
@Named
@Singleton
public class DefaultLifecycleExecutionPlanCalculator ... {
+ // CWE-407 fix: precompute a constant Set for O(1) standard-lifecycle lookup.
+ // Before this patch, calculateLifecycleMappings() called List.of(STANDARD_LIFECYCLES).contains()
+ // on every invocation — allocating a new List and doing a linear scan each time.
+ private static final Set<String> STANDARD_LIFECYCLE_IDS =
+ Collections.unmodifiableSet(new HashSet<>(Arrays.asList(DefaultLifecycles.STANDARD_LIFECYCLES)));
@@ -263,7 +267,7 @@ public class DefaultLifecycleExecutionPlanCalculator implements LifecycleExecuti
LifecycleMappingDelegate delegate;
- if (List.of(DefaultLifecycles.STANDARD_LIFECYCLES).contains(lifecycle.getId())) {
+ if (STANDARD_LIFECYCLE_IDS.contains(lifecycle.getId())) {
delegate = standardDelegate;
} else {
delegate = delegates.getOrDefault(lifecycle.getId(), standardDelegate);