Browse Source

Fixed C# parser crash on invalid unicode escape sequences in string literals.

pull/6/merge
Daniel Grunwald 13 years ago
parent
commit
6699d0bb1d
  1. 2
      src/Libraries/NRefactory/Project/Src/Lexer/AbstractLexer.cs
  2. 11
      src/Libraries/NRefactory/Test/Lexer/CSharp/NumberLexerTest.cs

2
src/Libraries/NRefactory/Project/Src/Lexer/AbstractLexer.cs

@ -282,7 +282,7 @@ namespace ICSharpCode.NRefactory.Parser @@ -282,7 +282,7 @@ namespace ICSharpCode.NRefactory.Parser
if ('a' <= digit && digit <= 'f') {
return digit - 'a' + 0xA;
}
errors.Error(line, col, String.Format("Invalid hex number '" + digit + "'"));
errors.Error(line, col, "Invalid hex number '" + digit + "'");
return 0;
}
protected Location lastLineEnd = new Location (1, 1);

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

@ -173,5 +173,16 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp @@ -173,5 +173,16 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp
CheckToken(@"'\x0041'", '\x0041');
CheckToken(@"'\U00000041'", '\U00000041');
}
[Test]
public void TestInvalidStringLiteral2()
{
ILexer l = GenerateLexer(new StringReader(@"""\u{0}"""));
Token t = l.NextToken();
Assert.AreEqual(Tokens.Literal, t.Kind);
Assert.AreEqual(new Location(1, 1), t.Location);
Assert.AreEqual(new Location(8, 1), t.EndLocation);
Assert.AreEqual(1, l.Errors.Count);
}
}
}

Loading…
Cancel
Save