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);
+ }
}
}
|