From 5bf19647c21c6a231034fb952c5571270c1f0b4e Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 15 Nov 2019 08:53:24 -0500 Subject: [Debugger] Fixed an NRE exception in OVTVController.RemoveValue if node.Parent is null Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1022024 --- .../ObjectValue/ObjectValueTreeViewController.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs index 30801ce85c..13ebca43b2 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs @@ -299,12 +299,18 @@ namespace MonoDevelop.Debugger void RemoveValue (ObjectValueNode node) { var toplevel = node.Parent is RootObjectValueNode; - int index = node.Parent.Children.IndexOf (node); + int index; + + if (node.Parent != null) { + index = node.Parent.Children.IndexOf (node); + } else { + index = -1; + } UnregisterNode (node); OnEvaluationCompleted (node, new ObjectValueNode[0]); - if (AllowWatchExpressions && toplevel) + if (AllowWatchExpressions && toplevel && index != -1) ExpressionRemoved?.Invoke (this, new ExpressionRemovedEventArgs (index, node.Name)); } -- cgit v1.2.3 From d6f0f14d1834e6bff1fdb378f9d130f184336a29 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 15 Nov 2019 09:14:18 -0500 Subject: [Debugger] Don't allow deleting of non-Root nodes --- .../MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs index 42504aa22a..f0e8816a96 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs @@ -828,6 +828,11 @@ namespace MonoDevelop.Debugger foreach (var row in selectedRows) { var item = (MacObjectValueNode) ItemAtRow ((nint) row); + // The user is only allowed to delete top-level nodes. It doesn't make sense to allow + // deleting child nodes of anything else. + if (!(item.Target.Parent is RootObjectValueNode)) + continue; + nodesToDelete.Add (item.Target); } -- cgit v1.2.3