Browse Source

Fixed VB lexer crash when "&H" was not followed by a number.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@935 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
8565dbf490
  1. 5
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
  2. 14
      src/Libraries/NRefactory/Test/Lexer/VBNet/LiteralsTests.cs

5
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs

@ -304,6 +304,11 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -304,6 +304,11 @@ namespace ICSharpCode.NRefactory.Parser.VB
}
}
if (digit.Length == 0) {
errors.Error(Line, Col, String.Format("digit expected"));
return new Token(Tokens.LiteralInteger, x, y, sb.ToString(), 0);
}
if (ReaderPeek() != -1 && ("%&SILU".IndexOf(PeekUpperChar()) != -1 || ishex || isokt)) {
ch = (char)ReaderPeek();
sb.Append(ch);

14
src/Libraries/NRefactory/Test/Lexer/VBNet/LiteralsTests.cs

@ -67,6 +67,20 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB @@ -67,6 +67,20 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB
CheckToken("&h3ff&", Tokens.LiteralInteger, 0x3ff);
}
[Test]
public void TestIncompleteHexadecimal()
{
ILexer lexer = GenerateLexer(new StringReader("&H\r\nabc"));
Token t = lexer.NextToken();
Assert.AreEqual(Tokens.LiteralInteger, t.kind);
Assert.AreEqual(0, (int)t.literalValue);
Assert.AreEqual(Tokens.EOL, lexer.NextToken().kind, "Tokens.EOL (1)");
Assert.AreEqual(Tokens.Identifier, lexer.NextToken().kind, "Tokens.Identifier");
Assert.AreEqual(Tokens.EOL, lexer.NextToken().kind, "Tokens.EOL (2)");
Assert.AreEqual(Tokens.EOF, lexer.NextToken().kind, "Tokens.EOF");
Assert.AreNotEqual("", lexer.Errors.ErrorOutput);
}
[Test]
public void TestStringLiterals()
{

Loading…
Cancel
Save