From 9865f6a92252c6dd0edb655ed12b9a2c443d9b06 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 25 Sep 2009 20:15:30 +0000 Subject: [PATCH] Fixed ArgumentOutOfRangeException in SearchResultNode.ActivateItem. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4995 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../AvalonEdit.AddIn/Src/TextMarkerService.cs | 6 +++++ .../Project/Gui/SearchResultNode.cs | 26 ++++++++++++------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs index 1373eb9f79..e967a57e9c 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs @@ -54,6 +54,12 @@ namespace ICSharpCode.AvalonEdit.AddIn #region ITextMarkerService public ITextMarker Create(int startOffset, int length) { + int textLength = codeEditor.Document.TextLength; + if (startOffset < 0 || startOffset > textLength) + throw new ArgumentOutOfRangeException("startOffset", startOffset, "Value must be between 0 and " + textLength); + if (length < 0 || startOffset + length > textLength) + throw new ArgumentOutOfRangeException("length", length, "length must not be negative and startOffset+length must not be after the end of the document"); + TextMarker m = new TextMarker(this, startOffset, length); markers.Add(m); // no need to mark segment for redraw: the text marker is invisible until a property is set diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs index 13c3692d6b..160ab8afff 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs @@ -116,15 +116,23 @@ namespace SearchAndReplace if (provider != null) { ITextMarkerService markerService = provider.TextEditor.GetService(typeof(ITextMarkerService)) as ITextMarkerService; if (markerService != null) { - ITextMarker marker = markerService.Create(provider.TextEditor.Document.PositionToOffset(lineNumber, column), result.Length); - marker.BackgroundColor = Colors.Orange; - marker.Tag = this; - EventHandler remover = null; - remover = (sender, e) => { - marker.Delete(); - provider.TextEditor.Caret.PositionChanged -= remover; - }; - provider.TextEditor.Caret.PositionChanged += remover; + ITextMarker marker = null; + try { + marker = markerService.Create(provider.TextEditor.Document.PositionToOffset(lineNumber, column), result.Length); + } catch (ArgumentOutOfRangeException) { + // can happen if lineNumber/column is after the end of the document; or if + // result.Length is too long + } + if (marker != null) { + marker.BackgroundColor = Colors.Orange; + marker.Tag = this; + EventHandler remover = null; + remover = (sender, e) => { + marker.Delete(); + provider.TextEditor.Caret.PositionChanged -= remover; + }; + provider.TextEditor.Caret.PositionChanged += remover; + } } } }