java-topology/defects/gradle/patch/gradle-0001-option-reader-set-membership.patch

26 lines
1.5 KiB
Diff

# UNDF: UNDF-2026-000000088
--- a/subprojects/core/src/main/java/org/gradle/api/internal/tasks/options/OptionReader.java
+++ b/subprojects/core/src/main/java/org/gradle/api/internal/tasks/options/OptionReader.java
@@ -1,5 +1,6 @@
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
@@ -90,9 +92,10 @@ public class OptionReader {
private static JavaMethod<Object, ?> getOptionValueMethodForOption(List<JavaMethod<Object, ?>> optionValueMethods, OptionElement optionElement) {
JavaMethod<Object, ?> valueMethod = null;
for (JavaMethod<Object, ?> optionValueMethod : optionValueMethods) {
String[] optionNames = getOptionNames(optionValueMethod);
- // CWE-407: CollectionUtils.toList() allocates a new ArrayList on every iteration
- // then .contains() scans it linearly — O(A * M * N) total.
- if (CollectionUtils.toList(optionNames).contains(optionElement.getOptionName())) {
+ // CWE-407 fix: use a HashSet for O(1) membership instead of a freshly
+ // allocated ArrayList scanned linearly on every inner-loop iteration.
+ Set<String> optionNameSet = new HashSet<>(Arrays.asList(optionNames));
+ if (optionNameSet.contains(optionElement.getOptionName())) {
if (valueMethod == null) {
valueMethod = optionValueMethod;
} else {