diff --git a/KeywordSearch/ivy.xml b/KeywordSearch/ivy.xml
index 3a03cb9dd8..e1436d4779 100644
--- a/KeywordSearch/ivy.xml
+++ b/KeywordSearch/ivy.xml
@@ -58,6 +58,8 @@
+
+
diff --git a/KeywordSearch/nbproject/project.properties b/KeywordSearch/nbproject/project.properties
index 93c35e470f..14efa21753 100644
--- a/KeywordSearch/nbproject/project.properties
+++ b/KeywordSearch/nbproject/project.properties
@@ -8,7 +8,7 @@ file.reference.failureaccess-1.0.2.jar=release/modules/ext/failureaccess-1.0.2.j
file.reference.guava-33.4.0-jre.jar=release/modules/ext/guava-33.4.0-jre.jar
file.reference.hamcrest-core-1.3.jar=release/modules/ext/hamcrest-core-1.3.jar
file.reference.http2-client-11.0.24.jar=release/modules/ext/http2-client-11.0.24.jar
-file.reference.http2-common-9.4.53.v20231009.jar=release/modules/ext/http2-common-9.4.53.v20231009.jar
+file.reference.http2-common-9.4.57.v20241219.jar=release/modules/ext/http2-common-9.4.57.v20241219.jar
file.reference.http2-hpack-9.4.53.v20231009.jar=release/modules/ext/http2-hpack-9.4.53.v20231009.jar
file.reference.http2-http-client-transport-9.4.53.v20231009.jar=release/modules/ext/http2-http-client-transport-9.4.53.v20231009.jar
file.reference.httpclient-4.5.13.jar=release/modules/ext/httpclient-4.5.13.jar
diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml
index ca03edaf12..0a55bf9789 100644
--- a/KeywordSearch/nbproject/project.xml
+++ b/KeywordSearch/nbproject/project.xml
@@ -275,8 +275,8 @@
release/modules/ext/http2-client-11.0.24.jar
- ext/http2-common-9.4.53.v20231009.jar
- release/modules/ext/http2-common-9.4.53.v20231009.jar
+ ext/http2-common-9.4.57.v20241219.jar
+ release/modules/ext/http2-common-9.4.57.v20241219.jar
ext/http2-hpack-9.4.53.v20231009.jar
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
index 629eaf65b8..d43d747e18 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
@@ -145,6 +145,11 @@ public final class KeywordSearchIngestModule implements FileIngestModule {
"application/x-z", //NON-NLS
"application/x-compress"); //NON-NLS
+ /**
+ * A mapping of the Tika metadata key to the corresponding attribute type
+ * and the priority of that key versus other related keys (lower integer
+ * value is higher priority).
+ */
private static final Map> METADATA_TYPES_MAP = Stream.of(
Pair.of(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_MODIFIED, List.of(
"Last-Save-Date",
@@ -686,24 +691,34 @@ public final class KeywordSearchIngestModule implements FileIngestModule {
Collection bbartifacts = new ArrayList<>();
/**
- * Get best matched metadata for each attribute type found in metadata map.
+ * This map will map the attribute type to a pair of the priority (lower
+ * number value is higher priority), and the string value for the
+ * attribute.
+ *
+ * Get best matched metadata for each attribute type found in metadata
+ * map by bumping out lower priority.
*/
Map> intermediateMapping = new HashMap<>();
for (Map.Entry entry : metadata.entrySet()) {
- Pair attrPair = METADATA_TYPES_MAP.get(entry.getKey());
- if (attrPair != null) {
- intermediateMapping.compute(attrPair.getKey(), (k, v) -> {
- if (v == null || v.getKey() > attrPair.getValue()) {
- return Pair.of(attrPair.getValue(), entry.getValue());
- } else {
- return v;
- }
- });
+ if (entry.getValue() != null) {
+ Pair attrPair = METADATA_TYPES_MAP.get(entry.getKey());
+ if (attrPair != null && attrPair.getKey() != null && attrPair.getValue() != null) {
+ intermediateMapping.compute(attrPair.getKey(), (k, v) -> {
+ if (v == null || v.getKey() > attrPair.getValue()) {
+ return Pair.of(attrPair.getValue(), entry.getValue());
+ } else {
+ return v;
+ }
+ });
+ }
}
}
for (Entry> interEntry: intermediateMapping.entrySet()) {
- attributes.add(checkAttribute(interEntry.getKey(), interEntry.getValue().getValue()));
+ BlackboardAttribute attribute = checkAttribute(interEntry.getKey(), interEntry.getValue().getValue());
+ if (attribute != null) {
+ attributes.add(attribute);
+ }
}
if (!attributes.isEmpty()) {