From af52fa8ca50c04e09350dcd234369137fcdbf920 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 22 Jun 2012 18:24:19 +0200 Subject: [PATCH] fix http://community.sharpdevelop.net/forums/t/15920.aspx - VB Parse - Unhandled Exception with embedded XML --- .../NRefactory/Project/Src/Lexer/VBNet/Lexer.cs | 5 ++++- .../NRefactory/Test/Parser/SnippetParserTests.cs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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); + } } }