]> granicus.if.org Git - clang/commit
Merging r324419:
authorHans Wennborg <hans@hanshq.net>
Thu, 8 Feb 2018 08:17:53 +0000 (08:17 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 8 Feb 2018 08:17:53 +0000 (08:17 +0000)
commit39e7ed25341e64e79d024f80e547b3e6558ac937
tree4279845d1564b133094adac27789cb618bf10c9b
parentb010081fcbf4792051bbd0bf31b5b7edbf8cbb9b
Merging r324419:
------------------------------------------------------------------------
r324419 | vsapsai | 2018-02-06 23:39:25 +0100 (Tue, 06 Feb 2018) | 23 lines

[Lex] Fix handling numerical literals ending with ' and signed exponent.

For input `0'e+1` lexer tokenized as numeric constant only `0'e`. Later
NumericLiteralParser skipped 0 and ' as digits and parsed `e+1` as valid
exponent going past the end of the token. Because it didn't mark numeric
literal as having an error, it continued parsing and tried to expandUCNs
with StringRef of length -2.

The fix is not to parse exponent when we reached the end of token.

Discovered by OSS-Fuzz:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4588

rdar://problem/36076719

Reviewers: rsmith, t.p.northover

Reviewed By: rsmith

Subscribers: cfe-commits, jkorous-apple

Differential Revision: https://reviews.llvm.org/D41834

------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_60@324579 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Lex/LiteralSupport.cpp
test/Lexer/cxx1y_digit_separators.cpp