================
@@ -24,21 +26,30 @@
 using namespace clang;
 using namespace ento;
 
-namespace {
-
 // enum value that represent the jail state
-enum Kind { NO_CHROOT, ROOT_CHANGED, JAIL_ENTERED };
+enum ChrootKind { NO_CHROOT, ROOT_CHANGED, ROOT_CHANGE_FAILED, JAIL_ENTERED };
 
-bool isRootChanged(intptr_t k) { return k == ROOT_CHANGED; }
-//bool isJailEntered(intptr_t k) { return k == JAIL_ENTERED; }
+// Track chroot state changes for success, failure, state change
+// and "jail"
+REGISTER_TRAIT_WITH_PROGRAMSTATE(ChrootState, ChrootKind)
+
+// Track the call expression to chroot for accurate
+// warning messages
+REGISTER_TRAIT_WITH_PROGRAMSTATE(ChrootCall, const Expr *)
----------------
vabridgers wrote:

The checker looks for unexpected usages of chdir() that follow an invocation of 
chroot(), so at the point of detecting an unexpected use of chdir() I want to 
produce an improved warning that includes a "note" about where chroot() was 
called. So I stored the Chroot expression with the intent of using it for the 
warning message. But your comments have got me thinking about simplifying all 
of this, so will look at doing that. If you have suggestions about simplest and 
best way, I'd be grateful to hear those. BTW, this pattern also exists in a 
different checker (cannot remember which one now).

https://github.com/llvm/llvm-project/pull/117791
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to