diff options
author | Manuel Klimek <klimek@google.com> | 2021-11-19 14:11:53 +0100 |
---|---|---|
committer | Manuel Klimek <klimek@google.com> | 2021-11-19 14:44:06 +0100 |
commit | c2271926a4fc395e05cf75a8e57c2dfab1f02d3d (patch) | |
tree | 68bf7e2c53bbd696b7e560837c895df050fc6ff2 /clang/lib/Format/QualifierAlignmentFixer.cpp | |
parent | 30b27ecfc2516c019209d2ea4b05903548635647 (diff) | |
download | llvm-c2271926a4fc395e05cf75a8e57c2dfab1f02d3d.zip llvm-c2271926a4fc395e05cf75a8e57c2dfab1f02d3d.tar.gz llvm-c2271926a4fc395e05cf75a8e57c2dfab1f02d3d.tar.bz2 |
Make clang-format fuzz through Lexing with asserts enabled.
Makes clang-format bail out if an in-memory source file with an
unsupported BOM is handed in instead of creating source locations that
are violating clang's assumptions.
In the future, we should add support to better transport error messages
like this through clang-format instead of printing to stderr and not
creating any changes.
Diffstat (limited to 'clang/lib/Format/QualifierAlignmentFixer.cpp')
-rw-r--r-- | clang/lib/Format/QualifierAlignmentFixer.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/Format/QualifierAlignmentFixer.cpp b/clang/lib/Format/QualifierAlignmentFixer.cpp index c70705a..5a89225 100644 --- a/clang/lib/Format/QualifierAlignmentFixer.cpp +++ b/clang/lib/Format/QualifierAlignmentFixer.cpp @@ -61,10 +61,10 @@ QualifierAlignmentFixer::QualifierAlignmentFixer( std::pair<tooling::Replacements, unsigned> QualifierAlignmentFixer::analyze( TokenAnnotator &Annotator, SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, FormatTokenLexer &Tokens) { - - auto Env = - std::make_unique<Environment>(Code, FileName, Ranges, FirstStartColumn, - NextStartColumn, LastStartColumn); + auto Env = Environment::make(Code, FileName, Ranges, FirstStartColumn, + NextStartColumn, LastStartColumn); + if (!Env) + return {}; llvm::Optional<std::string> CurrentCode = None; tooling::Replacements Fixes; for (size_t I = 0, E = Passes.size(); I < E; ++I) { @@ -75,10 +75,12 @@ std::pair<tooling::Replacements, unsigned> QualifierAlignmentFixer::analyze( Fixes = Fixes.merge(PassFixes.first); if (I + 1 < E) { CurrentCode = std::move(*NewCode); - Env = std::make_unique<Environment>( + Env = Environment::make( *CurrentCode, FileName, tooling::calculateRangesAfterReplacements(Fixes, Ranges), FirstStartColumn, NextStartColumn, LastStartColumn); + if (!Env) + return {}; } } } |