diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs index cad5421a4f..4752117958 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs @@ -312,7 +312,10 @@ namespace ICSharpCode.NRefactory.Parser.VB if (ch == '%' && ReaderPeek() == '>') { int x = Col - 1; int y = Line; - inXmlMode = true; + // in invalid code xmlModeStack might happen to be empty. + // do not set lexer to XML mode, if there was no valid XML before the inline VB code. + // fixes http://community.sharpdevelop.net/forums/t/15920.aspx + inXmlMode = xmlModeStack.Any(); ReaderRead(); return new Token(Tokens.XmlEndInlineVB, new Location(x, y), new Location(Col, Line)); } diff --git a/src/Libraries/NRefactory/Test/Parser/SnippetParserTests.cs b/src/Libraries/NRefactory/Test/Parser/SnippetParserTests.cs index 693693d9d7..a96ec10c62 100644 --- a/src/Libraries/NRefactory/Test/Parser/SnippetParserTests.cs +++ b/src/Libraries/NRefactory/Test/Parser/SnippetParserTests.cs @@ -26,5 +26,14 @@ namespace ICSharpCode.NRefactory.Tests INode node = parser.Parse("Dim doc = <%= test %>"); Assert.IsTrue(parser.Errors.Count == 0); } + + [Test] + public void InvalidXmlLiteral() + { + // ensure we don't crash on this invalid VB code + SnippetParser parser = new SnippetParser(SupportedLanguage.VBNet); + INode node = parser.Parse(">"); + Assert.IsTrue(parser.Errors.Count > 0); + } } }