From 8f8f5b25532279245799a779c4a5848eab042584 Mon Sep 17 00:00:00 2001 From: "eugene.livis" <elivis@basistech.com> Date: Mon, 18 Dec 2023 09:50:40 -0500 Subject: [PATCH] Bug fix --- .../src/org/sleuthkit/datamodel/ScoringManager.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bindings/java/src/org/sleuthkit/datamodel/ScoringManager.java b/bindings/java/src/org/sleuthkit/datamodel/ScoringManager.java index 0c8b70a7c..a88378109 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/ScoringManager.java +++ b/bindings/java/src/org/sleuthkit/datamodel/ScoringManager.java @@ -24,9 +24,11 @@ import java.sql.Statement; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Map; +import java.util.Set; import java.util.logging.Logger; import java.util.stream.Collectors; import org.sleuthkit.datamodel.Score.Priority; @@ -88,11 +90,15 @@ public Map<Long, Score> getAggregateScores(List<Long> objIds) throws TskCoreExce if (objIds.isEmpty()) { return Collections.emptyMap(); } + + // We need to deduplicate the list of object IDs. Otherwise the map + // below breaks and throws an exception. + Set<Long> set = new HashSet<>(objIds); String queryString = "SELECT obj_id, significance, priority FROM tsk_aggregate_score WHERE obj_id in " - + objIds.stream().map(l -> l.toString()).collect(Collectors.joining(",", "(", ")")); + + set.stream().map(l -> l.toString()).collect(Collectors.joining(",", "(", ")")); - Map<Long, Score> results = objIds.stream().collect(Collectors.toMap( key -> key, key -> Score.SCORE_UNKNOWN)); + Map<Long, Score> results = set.stream().collect(Collectors.toMap( key -> key, key -> Score.SCORE_UNKNOWN)); db.acquireSingleUserCaseReadLock(); try (CaseDbConnection connection = db.getConnection()) { try (Statement s = connection.createStatement(); ResultSet rs = connection.executeQuery(s, queryString)) { -- GitLab