Added line count check to avoid out of bounds

This commit is contained in:
Valter Costa
2023-04-18 12:46:48 +01:00
parent 8155a1e3d6
commit a9118774a8
2 changed files with 61 additions and 3 deletions

View File

@@ -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());
}
}

View File

@@ -334,9 +334,12 @@ public struct StringLineGroup : IEnumerable
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;