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