Navigation Menu

Skip to content

Commit

Permalink
Merge pull request #331 from EvgeniyZ/bugfix/nre-when-option-check-sy…
Browse files Browse the repository at this point in the history
…ntax-false

add check on null for Openednodes dictionary, add unit test
  • Loading branch information
JonathanMagnan committed Oct 1, 2019
2 parents 11eb7c0 + 34cc375 commit 5d0ed87
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 14 deletions.
31 changes: 17 additions & 14 deletions src/HtmlAgilityPack.Shared/HtmlNode.cs
Expand Up @@ -2011,20 +2011,23 @@ internal void UpdateLastNode()
HtmlNode newLast = null;
if (_prevwithsamename == null || !_prevwithsamename._starttag)
{
foreach (var openNode in _ownerdocument.Openednodes)
{
if ((openNode.Key < _outerstartindex || openNode.Key > (_outerstartindex + _outerlength)) && openNode.Value._name == _name)
{
if (newLast == null && openNode.Value._starttag)
{
newLast = openNode.Value;
}
else if (newLast !=null && newLast.InnerStartIndex < openNode.Key && openNode.Value._starttag)
{
newLast = openNode.Value;
}
}
}
if (_ownerdocument.Openednodes != null)
{
foreach (var openNode in _ownerdocument.Openednodes)
{
if ((openNode.Key < _outerstartindex || openNode.Key > (_outerstartindex + _outerlength)) && openNode.Value._name == _name)
{
if (newLast == null && openNode.Value._starttag)
{
newLast = openNode.Value;
}
else if (newLast != null && newLast.InnerStartIndex < openNode.Key && openNode.Value._starttag)
{
newLast = openNode.Value;
}
}
}
}
}
else
{
Expand Down
21 changes: 21 additions & 0 deletions src/Tests/HtmlAgilityPack.Tests.Net45/HtmlDocumentTests.cs
Expand Up @@ -1206,6 +1206,27 @@ public void AttributeSerialization()

}

[Test]
public void LoadHtml_WhenHtmlHasUnclosedTags_AndOptionCheckSyntaxFalse_ShouldNotThrowException()
{
var html = "<div>Some simple <p> html</div>";
var htmlDoc = new HtmlDocument { OptionCheckSyntax = false };

htmlDoc.LoadHtml(html);

using (var memoryStream = new MemoryStream())
{
htmlDoc.Save(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
using (var streamReader = new StreamReader(memoryStream))
{
string parsedHtml = streamReader.ReadToEnd();
Assert.IsNotEmpty(parsedHtml);
}
}
Assert.Zero(htmlDoc.ParseErrors.Count());
}

[HasXPath]
public class StackOverflowPage
{
Expand Down

0 comments on commit 5d0ed87

Please sign in to comment.