njames93 added a comment.

It would be a good idea to emit notes to help explain the problem code, I'm 
thinking something along the lines of:

  warning: exit-handler potentially calls a jump function. Handlers should 
terminate by returning [cert-env32-c]
  note: exit-handler declared here
  note: call to a jump function declared here

The second note would require you to track the call site along with the 
FunctionDecl. 
I wouldn't go as far as trying to track the entire call stack when functions in 
exit handlers call functions that exit. While its possible, it could end up 
looking messy.



================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:26
+namespace {
+constexpr StringRef EF__Exit = "_Exit";
+constexpr StringRef EF_exit = "exit";
----------------
Listen to the clang-tidy warnings.


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:72
+void ExitHandlerCheck::registerMatchers(MatchFinder *Finder) {
+  // clang-format off
+  Finder->addMatcher(
----------------
Is there a reason  for disabling format here? How messy is the matcher code 
when formatted?


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:78
+          anyOf(
+            hasName(RF_atexit),
+            hasName(RF_at_quick_exit)
----------------
Use `hasAnyName`


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:120-122
+    if (SeenFunctions.count(Current))
+      continue;
+    SeenFunctions.insert(Current);
----------------
nit:
```
if (!SeenFunctions.insert(Current).second)
  continue;
```


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:151
+    // Add called functions to the worklist.
+    std::copy(Collector.begin(), Collector.end(),
+              std::back_inserter(CalledFunctions));
----------------
Use `llvm::copy` instead of `std::copy`


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.h:18
+
+///
+/// Checker for SEI CERT rule ENV32-C
----------------
Unnecessary empty line


================
Comment at: clang-tools-extra/docs/ReleaseNotes.rst:87
+  <clang-tidy/checks/cert-env32-c>` check.
+  Finds functions registered by ``atexit`` and ``at_quick_exit`` those are 
calling
+  exit functions ``_Exit``, ``exit``, ``quick_exit`` or ``longjmp``.
----------------
s/those/that


================
Comment at: clang-tools-extra/docs/clang-tidy/checks/cert-env32-c.rst:114
+
+This compliant solution does not call longjmp()but instead returns from the 
exit handler normally:
+
----------------
Space after `longjmp() `


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83717/new/

https://reviews.llvm.org/D83717



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to