[PATCH] D44000: [clang] Fix use-after-free on code completion

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 2 03:26:43 PST 2018


sammccall accepted this revision.
sammccall added a comment.
This revision is now accepted and ready to land.

This feels like a bug in the underlying clang libraries, but since none of the lifetimes are documented and everyone just does it this way...



================
Comment at: clangd/CodeComplete.cpp:431
 // It doesn't do scoring or conversion to CompletionItem yet, as we want to
 // merge with index results first.
 struct CompletionRecorder : public CodeCompleteConsumer {
----------------
maybe comment:  'generally the fields/methods should only be used from within the callback'


================
Comment at: clangd/CodeComplete.cpp:470
     }
+    if (ResultsCallback)
+      ResultsCallback();
----------------
I think this check is dead - remove?


================
Comment at: clangd/CodeComplete.cpp:660
 // Invokes Sema code completion on a file.
 // Callback will be invoked once completion is done, but before cleaning up.
 bool semaCodeComplete(std::unique_ptr<CodeCompleteConsumer> Consumer,
----------------
remove this comment


================
Comment at: clangd/CodeComplete.cpp:665
-                      llvm::function_ref<void()> Callback = nullptr) {
+                      const SemaCompleteInput &Input) {
   auto Tracer = llvm::make_unique<trace::Span>("Sema completion");
   std::vector<const char *> ArgStrs;
----------------
this can be stack-allocated, as we don't need to reset it


================
Comment at: clangd/CodeComplete.cpp:737
-
   Tracer = llvm::make_unique<trace::Span>("Sema completion cleanup");
   Action.EndSourceFile();
----------------
this tracer isn't needed anymore as discussed


================
Comment at: clangd/CodeComplete.cpp:816
 //
 // So we start Sema completion first, but defer its cleanup until we're done.
 // We use the Sema context information to query the index.
----------------
this comment should probably be ", and do all our work in its callback"


================
Comment at: clangd/CodeComplete.cpp:852
     // We run Sema code completion first. It builds an AST and calculates:
     //   - completion results based on the AST. These are saved for merging.
     //   - partial identifier and context. We need these for the index query.
----------------
remove "these are saved for merging"



Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D44000





More information about the cfe-commits mailing list