Skip to content

Commit 4595c86

Browse files
authored
Merge pull request #7 from kasthack/feature/issues-6-allow-diamond-bracket-in-attributes
Allow to suppress '<' validation for attribute values
2 parents fdf519c + 21a44ed commit 4595c86

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/AngleSharp.Xml.Tests/Tokenizer/XmlTokenization.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,5 +182,32 @@ public void XmlTokenizerTagWithAttributeContainingEntity()
182182
Assert.AreEqual("bar", foo.Attributes[0].Key);
183183
Assert.AreEqual("\"quz\"", foo.Attributes[0].Value);
184184
}
185+
186+
[Test]
187+
public void XmlTokenizerTagThrowsWithADiamond()
188+
{
189+
var s = new TextSource("<foo bar=\"a < b\">");
190+
191+
var t = CreateTokenizer(s);
192+
t.IsSuppressingErrors = false;
193+
Assert.Throws<XmlParseException>(() => t.Get());
194+
}
195+
196+
[Test]
197+
public void XmlTokenizerTagSuppressesWithADiamond()
198+
{
199+
var s = new TextSource("<foo bar=\"a < b\">");
200+
var t = CreateTokenizer(s);
201+
t.IsSuppressingErrors = true;
202+
var foo = t.Get() as XmlTagToken;
203+
204+
Assert.IsNotNull(foo);
205+
Assert.AreEqual(XmlTokenType.StartTag, foo.Type);
206+
Assert.IsFalse(foo.IsSelfClosing);
207+
Assert.AreEqual("foo", foo.Name);
208+
Assert.AreEqual(1, foo.Attributes.Count);
209+
Assert.AreEqual("bar", foo.Attributes[0].Key);
210+
Assert.AreEqual("a < b", foo.Attributes[0].Value);
211+
}
185212
}
186213
}

src/AngleSharp.Xml/Parser/XmlTokenizer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1046,7 +1046,7 @@ private XmlToken AttributeValue(XmlTagToken tag, Char quote)
10461046
if (c == Symbols.EndOfFile)
10471047
throw XmlParseError.EOF.At(GetCurrentPosition());
10481048

1049-
if (c == Symbols.LessThan)
1049+
if (c == Symbols.LessThan && !IsSuppressingErrors)
10501050
throw XmlParseError.XmlLtInAttributeValue.At(GetCurrentPosition());
10511051

10521052
if (c == Symbols.Ampersand)

0 commit comments

Comments
 (0)