diff --git a/iped-app/src/main/java/iped/app/ui/TreeListener.java b/iped-app/src/main/java/iped/app/ui/TreeListener.java index 338b468a8a..427f14d19c 100644 --- a/iped-app/src/main/java/iped/app/ui/TreeListener.java +++ b/iped-app/src/main/java/iped/app/ui/TreeListener.java @@ -39,11 +39,12 @@ import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import iped.app.ui.TreeViewModel.Node; import iped.app.ui.filters.QueryFilter; import iped.engine.data.IPEDSource; -import iped.engine.search.LuceneSearchResult; import iped.engine.search.QueryBuilder; import iped.engine.task.index.IndexItem; import iped.exception.ParseException; @@ -53,6 +54,8 @@ public class TreeListener extends MouseAdapter implements TreeSelectionListener, ActionListener, TreeExpansionListener, IQueryFilterer { + private static final Logger logger = LoggerFactory.getLogger(TreeListener.class); + private Query treeQuery, recursiveTreeQuery; boolean rootSelected = false; HashSet selection = new HashSet(); @@ -121,24 +124,27 @@ public void valueChanged(TreeSelectionEvent evt) { public void navigateToParent(int docId) { LinkedList path = new LinkedList(); - LuceneSearchResult result = new LuceneSearchResult(0); String parentId = null; - do { - try { + try { + do { Document doc = App.get().appCase.getReader().document(docId); parentId = doc.get(IndexItem.PARENTID); if (parentId != null) { IPEDSource src = (IPEDSource) App.get().appCase.getAtomicSource(docId); - docId = App.get().appCase.getBaseLuceneId(src) + src.getLuceneId(Integer.parseInt(parentId)); + docId = src.getLuceneId(Integer.parseInt(parentId)); + if (docId == -1) { + throw new RuntimeException("Parent with id = " + parentId + " not found in the index"); + } + docId += App.get().appCase.getBaseLuceneId(src); path.addFirst(((TreeViewModel) App.get().tree.getModel()).new Node(docId)); } + } while (parentId != null); - } catch (Exception e) { - e.printStackTrace(); - } - - } while (parentId != null); + } catch (Exception e) { + logger.error("Navigate to parent failed!", e); + return; + } path.addFirst((Node) App.get().tree.getModel().getRoot()); diff --git a/iped-engine/src/main/java/iped/engine/datasource/UfedXmlReader.java b/iped-engine/src/main/java/iped/engine/datasource/UfedXmlReader.java index a5b307b0eb..959686a0d2 100644 --- a/iped-engine/src/main/java/iped/engine/datasource/UfedXmlReader.java +++ b/iped-engine/src/main/java/iped/engine/datasource/UfedXmlReader.java @@ -896,6 +896,7 @@ else if (parentItem.getMediaType().equals(MediaTypes.UFED_MESSAGE_MIME)) { item.getMetadata().set(ExtraProperties.MESSAGE_BODY, body); } int numInstantMsgAttachs = 0; + boolean ignoreItemLocal = false; if ("InstantMessage".equals(type)) { numInstantMsgAttachs = this.numAttachments; if (numInstantMsgAttachs > 0) { @@ -904,6 +905,13 @@ else if (parentItem.getMediaType().equals(MediaTypes.UFED_MESSAGE_MIME)) { UFEDChatParser.ATTACHED_MEDIA_MSG + numInstantMsgAttachs); } this.numAttachments = 0; + if (!itemSeq.isEmpty()) { + IItem parentItem = itemSeq.get(itemSeq.size() - 1); + // See https://github.com/sepinf-inc/IPED/issues/2264#issuecomment-2254192462 + if (parentItem.getName().startsWith("ReplyMessageData_")) { + ignoreItemLocal = true; + } + } } if (mergeInParentNode.contains(type) && itemSeq.size() > 0) { IItem parentItem = itemSeq.get(itemSeq.size() - 1); @@ -1067,7 +1075,11 @@ else if ("Bcc".equalsIgnoreCase(role)) //$NON-NLS-1$ String ufedId = item.getMetadata().get(ExtraProperties.UFED_META_PREFIX + "id"); // add items if not ignoring already added instant message xml tree if (ignoreItemTree == null) { - processItem(item); + if (!ignoreItemLocal) { + processItem(item); + } else { + caseData.incDiscoveredEvidences(-1); + } if ("InstantMessage".equals(type)) { // remember IM ids to not add them again later addedImUfedIds.add(ufedId);