You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2022/08/03 08:33:08 UTC
[karaf] branch karaf-4.2.x updated: KARAF-7522 Fix stack overflow error with duplicate features.
This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch karaf-4.2.x
in repository https://gitbox.apache.org/repos/asf/karaf.git
The following commit(s) were added to refs/heads/karaf-4.2.x by this push:
new d157694a33 KARAF-7522 Fix stack overflow error with duplicate features.
new e2357b3ab4 Merge pull request #1604 from splatch/KARAF-7522
d157694a33 is described below
commit d157694a33dd15f4fb31ddf8079e2849451990a1
Author: Łukasz Dywicki <lu...@code-house.org>
AuthorDate: Fri Jul 22 16:44:10 2022 +0200
KARAF-7522 Fix stack overflow error with duplicate features.
Signed-off-by: Łukasz Dywicki <lu...@code-house.org>
---
.../karaf/features/internal/region/Subsystem.java | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
index c9b374074b..e68929e05d 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
@@ -23,6 +23,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -329,7 +330,23 @@ public class Subsystem extends ResourceImpl {
@SuppressWarnings("InfiniteLoopStatement")
public void build(Map<String, List<Feature>> allFeatures) throws Exception {
- doBuild(allFeatures, true);
+ Map<String, List<Feature>> cleaned = new LinkedHashMap<>();
+ for (Map.Entry<String, List<Feature>> entry : allFeatures.entrySet()) {
+ if (entry.getValue().size() > 1) {
+ Map<String, Feature> versionMap = new LinkedHashMap<>();
+ for (Feature feature : entry.getValue()) {
+ if (!versionMap.containsKey(feature.getVersion())) {
+ versionMap.put(feature.getVersion(), feature);
+ } else {
+ // warn about duplicate
+ }
+ }
+ cleaned.put(entry.getKey(), new ArrayList<>(versionMap.values()));
+ } else {
+ cleaned.put(entry.getKey(), entry.getValue());
+ }
+ }
+ doBuild(cleaned, true);
}
private void doBuild(Map<String, List<Feature>> allFeatures, boolean mandatory) throws Exception {