Skip to content

Commit

Permalink
Added line count check to avoid out of bounds
Browse files Browse the repository at this point in the history
  • Loading branch information
valterc committed Apr 18, 2023
1 parent 8155a1e commit a911877
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
55 changes: 55 additions & 0 deletions src/Markdig.Tests/TestStringLineGroup.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using Markdig.Helpers;
using System.Text;

namespace Markdig.Tests;

[TestFixture]
public class TestStringLineGroup
{
private static string ToString(ICharIterator text)
{
var chars = new StringBuilder();
while (text.CurrentChar != '\0')
{
chars.Append(text.CurrentChar);
text.NextChar();
}
return chars.ToString();
}

[Test]
public void TestStringLineGroupCharIteratorAtCapacity()
{
string str = "ABCDEFGHI";
var text = new StringLineGroup(1)
{
// Will store the following line at capacity
new StringSlice(str, NewLine.CarriageReturnLineFeed) { Start = 0, End = 2 },
};

var iterator = text.ToCharIterator();
var chars = ToString(iterator);
TextAssert.AreEqual("ABC\r\n", chars.ToString());
TextAssert.AreEqual("ABC", text.ToString());
}

[Test]
public void TestStringLineGroupCharIteratorForcingIncreaseCapacity()
{
string str = "ABCDEFGHI";
var text = new StringLineGroup(1)
{
// Will store the following line at capacity
new StringSlice(str, NewLine.CarriageReturnLineFeed) { Start = 0, End = 2 },

// Will force increase capacity to 2 and store the line at capacity
new StringSlice(str, NewLine.CarriageReturnLineFeed) { Start = 3, End = 3 },
};

var iterator = text.ToCharIterator();
var chars = ToString(iterator);
TextAssert.AreEqual("ABC\r\nD\r\n", chars.ToString());
TextAssert.AreEqual("ABC\r\nD", text.ToString());
}

}
9 changes: 6 additions & 3 deletions src/Markdig/Helpers/StringLineGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -334,9 +334,12 @@ private char NextCharNewLine()
goto Return;

MoveToNewLine:
SliceIndex++;
_offset = -1;
_currentSlice = _lines.Lines[SliceIndex];
if (SliceIndex < _lines.Count - 1)
{
SliceIndex++;
_offset = -1;
_currentSlice = _lines.Lines[SliceIndex];
}

Return:
return CurrentChar;
Expand Down

0 comments on commit a911877

Please sign in to comment.