]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
lgtm: ignore certain cleanup functions
authorFrantisek Sumsal <frantisek@sumsal.cz>
Sun, 5 Dec 2021 09:25:28 +0000 (10:25 +0100)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Sun, 5 Dec 2021 14:53:22 +0000 (15:53 +0100)
as they don't do any illegal stuff even when used with an uninitialized
variable.

.lgtm/cpp-queries/UninitializedVariableWithCleanup.ql

index 6bf0ae01ebb0b807b6508dafe4d80934d3079112..8c24b6d8f172c090f5a45ebff28a2916484de400 100644 (file)
@@ -34,6 +34,13 @@ predicate allocatedType(Type t) {
   allocatedType(t.getUnspecifiedType())
 }
 
+/** Auxiliary predicate: List cleanup functions we want to explicitly ignore
+  * since they don't do anything illegal even when the variable is uninitialized
+  */
+predicate cleanupFunctionDenyList(string fun) {
+  fun = "erase_char"
+}
+
 /**
  * A declaration of a local variable using __attribute__((__cleanup__(x)))
  * that leaves the variable uninitialized.
@@ -43,6 +50,8 @@ DeclStmt declWithNoInit(LocalVariable v) {
   not exists(v.getInitializer()) and
   /* The variable has __attribute__((__cleanup__(...))) set */
   v.getAnAttribute().hasName("cleanup") and
+  /* Check if the cleanup function is not on a deny list */
+  not exists(Attribute a | a = v.getAnAttribute() and a.getName() = "cleanup" | cleanupFunctionDenyList(a.getAnArgument().getValueText())) and
   /* The type of the variable is not stack-allocated. */
   exists(Type t | t = v.getType() | not allocatedType(t))
 }