diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs
index 2f95c9b90e..27c473589e 100644
--- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs
+++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/TextIterator/ForwardTextIterator.cs
@@ -85,6 +85,10 @@ namespace SearchAndReplace
switch (state) {
case TextIteratorState.Resetted:
+ if (textBuffer.Length == 0) {
+ state = TextIteratorState.Done;
+ return false;
+ }
Position = endOffset;
state = TextIteratorState.Iterating;
return true;
diff --git a/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs b/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs
new file mode 100644
index 0000000000..b45b549c34
--- /dev/null
+++ b/src/Main/Base/Test/ForwardIteratorWithEmptyTextBufferTestFixture.cs
@@ -0,0 +1,47 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+using ICSharpCode.SharpDevelop.Tests.Utils;
+using ICSharpCode.TextEditor.Document;
+using SearchAndReplace;
+using NUnit.Framework;
+
+namespace ICSharpCode.SharpDevelop.Tests
+{
+ ///
+ /// The fix for SD2-857 highlighted another bug (SD2-1312) in the
+ /// ForwardTextIterator where it does not handle the case where
+ /// the ITextBufferStrategy has a length of zero.
+ ///
+ [TestFixture]
+ public class ForwardIteratorWithEmptyTextBufferTestFixture
+ {
+ ForwardTextIterator forwardTextIterator;
+
+ [SetUp]
+ public void SetUp()
+ {
+ // Create the document to be iterated through.
+ MockDocument doc = new MockDocument();
+ StringTextBufferStrategy textBufferStrategy = new StringTextBufferStrategy();
+ doc.TextBufferStrategy = textBufferStrategy;
+ ProvidedDocumentInformation docInfo = new ProvidedDocumentInformation(doc,
+ @"C:\Temp\test.txt",
+ 0);
+
+ // Create the forward iterator.
+ forwardTextIterator = new ForwardTextIterator(docInfo);
+ }
+
+ [Test]
+ public void CannotMoveAhead()
+ {
+ Assert.IsFalse(forwardTextIterator.MoveAhead(1));
+ }
+ }
+}
diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
index e6769bd950..77d40a37bb 100644
--- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
+++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
@@ -53,6 +53,7 @@
+