Browse Source

Fixed SD2-457: C# lexer crash on "0x"

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@518 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
6c6d72de24
  1. 4
      src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs
  2. 10
      src/Libraries/NRefactory/Test/Lexer/CSharp/NumberLexerTest.cs

4
src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs

@ -162,6 +162,10 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
while (IsHex((char)ReaderPeek())) { while (IsHex((char)ReaderPeek())) {
sb.Append(Char.ToUpper((char)ReaderRead(), CultureInfo.InvariantCulture)); sb.Append(Char.ToUpper((char)ReaderRead(), CultureInfo.InvariantCulture));
} }
if (sb.Length == 0) {
sb.Append('0'); // dummy value to prevent exception
errors.Error(y, x, "Invalid hexadecimal integer literal");
}
ishex = true; ishex = true;
prefix = "0x"; prefix = "0x";
peek = (char)ReaderPeek(); peek = (char)ReaderPeek();

10
src/Libraries/NRefactory/Test/Lexer/CSharp/NumberLexerTest.cs

@ -70,6 +70,16 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp
CheckToken("0xAB1f", 0xAB1f); CheckToken("0xAB1f", 0xAB1f);
} }
[Test]
public void InvalidHexadecimalInteger()
{
// don't check result, just make sure there is no exception
GenerateLexer(new StringReader("0x2GF")).NextToken();
GenerateLexer(new StringReader("0xG2F")).NextToken();
// SD2-457
GenerateLexer(new StringReader("0x")).NextToken();
}
[Test] [Test]
public void TestLongHexadecimalInteger() public void TestLongHexadecimalInteger()
{ {

Loading…
Cancel
Save