diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Engine/Search.cs b/src/AddIns/Misc/SearchAndReplace/Project/Engine/Search.cs index 4e1f20345c..111e42d2c4 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Engine/Search.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Engine/Search.cs @@ -145,7 +145,7 @@ namespace SearchAndReplace if (documentIterator.MoveForward()) { info = documentIterator.Current; // document is valid for searching -> set iterator & fileName - if (info != null && info.EndOffset >= 0 && info.EndOffset < info.Document.TextLength) { + if (info != null && info.EndOffset >= 0 && info.EndOffset <= info.Document.TextLength) { textIterator = textIteratorBuilder.BuildTextIterator(info); } else { textIterator = null; diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/BruteForceSearchStrategy.cs b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/BruteForceSearchStrategy.cs index e6692bfae8..0ad639b754 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/BruteForceSearchStrategy.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/BruteForceSearchStrategy.cs @@ -54,7 +54,10 @@ namespace SearchAndReplace int InternalFindNext(ITextIterator textIterator, int offset, int length) { - while (textIterator.MoveAhead(1) && TextSelection.IsInsideRange(textIterator.Position, offset, length)) { + while (textIterator.MoveAhead(1)) { + if (textIterator.Position >= offset + length) { + textIterator.Position = offset; + } if (SearchOptions.MatchCase ? MatchCaseSensitive(textIterator.Document, textIterator.Position, searchPattern) : MatchCaseInsensitive(textIterator.Document, textIterator.Position, searchPattern)) { if (!SearchOptions.MatchWholeWord || IsWholeWordAt(textIterator.Document, textIterator.Position, searchPattern.Length)) { if (TextSelection.IsInsideRange(textIterator.Position + searchPattern.Length - 1, offset, length)) { diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/RegExSearchStrategy.cs b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/RegExSearchStrategy.cs index 96f3071f7a..7296f2cea3 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/RegExSearchStrategy.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/RegExSearchStrategy.cs @@ -58,7 +58,10 @@ namespace SearchAndReplace { string document = textIterator.Document.GetText(0, textIterator.Document.TextLength); - while (textIterator.MoveAhead(1) && TextSelection.IsInsideRange(textIterator.Position, offset, length)) { + while (textIterator.MoveAhead(1)) { + if (textIterator.Position >= offset + length) { + textIterator.Position = offset; + } Match m = regex.Match(document, textIterator.Position); if (m == null || !m.Success) { while (textIterator.Position < document.Length - 1) { diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/WildcardSearchStrategy.cs b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/WildcardSearchStrategy.cs index dd241261a4..35516d1ea9 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/WildcardSearchStrategy.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchStrategy/WildcardSearchStrategy.cs @@ -145,7 +145,10 @@ namespace SearchAndReplace int InternalFindNext(ITextIterator textIterator, int offset, int length) { - while (textIterator.MoveAhead(1) && TextSelection.IsInsideRange(textIterator.Position, offset, length)) { + while (textIterator.MoveAhead(1)) { + if (textIterator.Position >= offset + length) { + textIterator.Position = offset; + } int position = textIterator.Position; if (Match(textIterator.Document, position, !SearchOptions.MatchCase, 0)) { if (!SearchOptions.MatchWholeWord || SearchReplaceUtilities.IsWholeWordAt(textIterator.Document, position, curMatchEndOffset - position)) {