[Format] Capture `FormatStyle` by value to avoid use-after-free.
authorJordan Rupprecht <rupprecht@google.com>
Fri, 16 Dec 2022 04:38:32 +0000 (20:38 -0800)
committerJordan Rupprecht <rupprecht@google.com>
Fri, 16 Dec 2022 04:38:32 +0000 (20:38 -0800)
Fixes the test failure in 240e29c5015d246de7fb5e4421aa93042fada59b, reported on the D140058 review thread.

clang/lib/Format/Format.cpp

index c553a5b..77f6892 100644 (file)
@@ -3404,7 +3404,7 @@ reformat(const FormatStyle &Style, StringRef Code,
     if (Style.InsertBraces) {
       FormatStyle S = Expanded;
       S.InsertBraces = true;
-      Passes.emplace_back([&](const Environment &Env) {
+      Passes.emplace_back([&, S](const Environment &Env) {
         return BracesInserter(Env, S).process(/*SkipAnnotation=*/true);
       });
     }
@@ -3412,7 +3412,7 @@ reformat(const FormatStyle &Style, StringRef Code,
     if (Style.RemoveBracesLLVM) {
       FormatStyle S = Expanded;
       S.RemoveBracesLLVM = true;
-      Passes.emplace_back([&](const Environment &Env) {
+      Passes.emplace_back([&, S](const Environment &Env) {
         return BracesRemover(Env, S).process(/*SkipAnnotation=*/true);
       });
     }
@@ -3420,7 +3420,7 @@ reformat(const FormatStyle &Style, StringRef Code,
     if (Style.RemoveSemicolon) {
       FormatStyle S = Expanded;
       S.RemoveSemicolon = true;
-      Passes.emplace_back([&](const Environment &Env) {
+      Passes.emplace_back([&, S](const Environment &Env) {
         return SemiRemover(Env, S).process(/*SkipAnnotation=*/true);
       });
     }