From 23a02fbce448ee52ff72468c11aa3cf4f05a993b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 10 May 2019 12:09:58 -0400 Subject: [PATCH] 4961 prevent leaking this in constructor when setting up listeners --- Core/src/org/sleuthkit/autopsy/rejview/HexView.java | 8 +++++--- .../org/sleuthkit/autopsy/rejview/RejTreeValueView.java | 1 + Core/src/org/sleuthkit/autopsy/rejview/RejTreeView.java | 7 +++++-- Core/src/org/sleuthkit/autopsy/rejview/RejView.java | 2 ++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/rejview/HexView.java b/Core/src/org/sleuthkit/autopsy/rejview/HexView.java index fbd29418bc..fbb4046ccd 100644 --- a/Core/src/org/sleuthkit/autopsy/rejview/HexView.java +++ b/Core/src/org/sleuthkit/autopsy/rejview/HexView.java @@ -155,15 +155,17 @@ final class HexView extends JPanel implements CaretListener { this._hexView.setText(hexSB.toString()); this._asciiView.setText(asciiSB.toString()); - this._hexView.addCaretListener(this); - this._asciiView.addCaretListener(this); - this._asciiView.setSelectedTextColor(this._asciiView.getForeground()); this._hexView.setSelectedTextColor(this._asciiView.getForeground()); this._highlightColor = this._hexView.getSelectionColor(); this._highlighterPainter = new DefaultHighlighter.DefaultHighlightPainter(this._highlightColor); } + void addCaretListeners() { + this._hexView.addCaretListener(this); + this._asciiView.addCaretListener(this); + } + /** * clearHighlight removes any colors applied to the text views. */ diff --git a/Core/src/org/sleuthkit/autopsy/rejview/RejTreeValueView.java b/Core/src/org/sleuthkit/autopsy/rejview/RejTreeValueView.java index 4fbf596b13..1bc9ab7650 100644 --- a/Core/src/org/sleuthkit/autopsy/rejview/RejTreeValueView.java +++ b/Core/src/org/sleuthkit/autopsy/rejview/RejTreeValueView.java @@ -116,6 +116,7 @@ public final class RejTreeValueView extends RejTreeNodeView { } default: { HexView hexView = new HexView(data.getAsRawData()); + hexView.addCaretListeners(); hexView.setBorder(BorderFactory.createTitledBorder("Value")); valueComponent = hexView; break; diff --git a/Core/src/org/sleuthkit/autopsy/rejview/RejTreeView.java b/Core/src/org/sleuthkit/autopsy/rejview/RejTreeView.java index cfce7fae67..c5ea447e30 100644 --- a/Core/src/org/sleuthkit/autopsy/rejview/RejTreeView.java +++ b/Core/src/org/sleuthkit/autopsy/rejview/RejTreeView.java @@ -62,8 +62,6 @@ final class RejTreeView extends JScrollPane implements TreeExpansionListener, Tr this._tree_model.setAsksAllowsChildren(true); this._tree = new JTree(this._tree_model); - this._tree.addTreeExpansionListener(this); - this._tree.addTreeSelectionListener(this); // here's a bit of a hack to force the children to be loaded and shown this._tree.collapsePath(new TreePath(rootNode.getPath())); @@ -73,6 +71,11 @@ final class RejTreeView extends JScrollPane implements TreeExpansionListener, Tr setPreferredSize(new Dimension(250, 400)); } + void addTreeListeners() { + this._tree.addTreeExpansionListener(this); + this._tree.addTreeSelectionListener(this); + } + /** * getTreeNode creates a TreeNode from a RejTreeNode, settings the * appropriate fields. diff --git a/Core/src/org/sleuthkit/autopsy/rejview/RejView.java b/Core/src/org/sleuthkit/autopsy/rejview/RejView.java index 490efc1873..ce72bffb7a 100644 --- a/Core/src/org/sleuthkit/autopsy/rejview/RejView.java +++ b/Core/src/org/sleuthkit/autopsy/rejview/RejView.java @@ -41,6 +41,7 @@ public final class RejView extends JPanel implements RejTreeNodeSelectionListene this._hive = hive; // have to do these cause they're final this._tree_view = new RejTreeView(this._hive); + this._tree_view.addTreeListeners(); this._splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, this._tree_view, new JPanel()); this.setupUI(); @@ -52,6 +53,7 @@ public final class RejView extends JPanel implements RejTreeNodeSelectionListene // have to do these cause they're final this._tree_view = new RejTreeView(this._hive); + this._tree_view.addTreeListeners(); this._splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, this._tree_view, new JPanel()); this.setupUI();