forked from OSchip/llvm-project
[lex] Don't read past the end of the buffer
While dereferencing ThisTokEnd is fine and we know that it's not in [a-zA-Z0-9_.], ThisTokEnd[1] is really past the end. Found by asan and with a little help from clang-fuzz. llvm-svn: 233491
This commit is contained in:
parent
7fd88386b0
commit
8671028e95
|
@ -748,11 +748,11 @@ void NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {
|
||||||
s++;
|
s++;
|
||||||
|
|
||||||
int c1 = s[0];
|
int c1 = s[0];
|
||||||
int c2 = s[1];
|
|
||||||
|
|
||||||
// Handle a hex number like 0x1234.
|
// Handle a hex number like 0x1234.
|
||||||
if ((c1 == 'x' || c1 == 'X') && (isHexDigit(c2) || c2 == '.')) {
|
if ((c1 == 'x' || c1 == 'X') && (isHexDigit(s[1]) || s[1] == '.')) {
|
||||||
s++;
|
s++;
|
||||||
|
assert(s < ThisTokEnd && "didn't maximally munch?");
|
||||||
radix = 16;
|
radix = 16;
|
||||||
DigitsBegin = s;
|
DigitsBegin = s;
|
||||||
s = SkipHexDigits(s);
|
s = SkipHexDigits(s);
|
||||||
|
@ -804,7 +804,7 @@ void NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle simple binary numbers 0b01010
|
// Handle simple binary numbers 0b01010
|
||||||
if ((c1 == 'b' || c1 == 'B') && (c2 == '0' || c2 == '1')) {
|
if ((c1 == 'b' || c1 == 'B') && (s[1] == '0' || s[1] == '1')) {
|
||||||
// 0b101010 is a C++1y / GCC extension.
|
// 0b101010 is a C++1y / GCC extension.
|
||||||
PP.Diag(TokLoc,
|
PP.Diag(TokLoc,
|
||||||
PP.getLangOpts().CPlusPlus14
|
PP.getLangOpts().CPlusPlus14
|
||||||
|
@ -813,6 +813,7 @@ void NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {
|
||||||
? diag::ext_binary_literal_cxx14
|
? diag::ext_binary_literal_cxx14
|
||||||
: diag::ext_binary_literal);
|
: diag::ext_binary_literal);
|
||||||
++s;
|
++s;
|
||||||
|
assert(s < ThisTokEnd && "didn't maximally munch?");
|
||||||
radix = 2;
|
radix = 2;
|
||||||
DigitsBegin = s;
|
DigitsBegin = s;
|
||||||
s = SkipBinaryDigits(s);
|
s = SkipBinaryDigits(s);
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
// RUN: %clang_cc1 %s -verify -fsyntax-only -Wnewline-eof
|
||||||
|
// vim: set binary noeol:
|
||||||
|
|
||||||
|
// This file intentionally ends without a \n on the last line. Make sure your
|
||||||
|
// editor doesn't add one.
|
||||||
|
|
||||||
|
// expected-error@+2{{unterminated conditional directive}}
|
||||||
|
// expected-warning@+1{{no newline at end of file}}
|
||||||
|
#if 0
|
Loading…
Reference in New Issue