|
|
3d3dc8 |
From 42123e9614ea73c7f64c684c90e4dbb049ef67ef Mon Sep 17 00:00:00 2001
|
|
|
3d3dc8 |
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
|
3d3dc8 |
Date: Sun, 5 Dec 2021 10:25:28 +0100
|
|
|
3d3dc8 |
Subject: [PATCH] lgtm: ignore certain cleanup functions
|
|
|
3d3dc8 |
|
|
|
3d3dc8 |
as they don't do any illegal stuff even when used with an uninitialized
|
|
|
3d3dc8 |
variable.
|
|
|
3d3dc8 |
|
|
|
3d3dc8 |
(cherry picked from commit af1868213657b38b8d4008608976eb81546cfb8e)
|
|
|
3d3dc8 |
|
|
|
3d3dc8 |
Related: #2017033
|
|
|
3d3dc8 |
---
|
|
|
3d3dc8 |
.lgtm/cpp-queries/UninitializedVariableWithCleanup.ql | 9 +++++++++
|
|
|
3d3dc8 |
1 file changed, 9 insertions(+)
|
|
|
3d3dc8 |
|
|
|
3d3dc8 |
diff --git a/.lgtm/cpp-queries/UninitializedVariableWithCleanup.ql b/.lgtm/cpp-queries/UninitializedVariableWithCleanup.ql
|
|
|
3d3dc8 |
index 6bf0ae01eb..8c24b6d8f1 100644
|
|
|
3d3dc8 |
--- a/.lgtm/cpp-queries/UninitializedVariableWithCleanup.ql
|
|
|
3d3dc8 |
+++ b/.lgtm/cpp-queries/UninitializedVariableWithCleanup.ql
|
|
|
3d3dc8 |
@@ -34,6 +34,13 @@ predicate allocatedType(Type t) {
|
|
|
3d3dc8 |
allocatedType(t.getUnspecifiedType())
|
|
|
3d3dc8 |
}
|
|
|
3d3dc8 |
|
|
|
3d3dc8 |
+/** Auxiliary predicate: List cleanup functions we want to explicitly ignore
|
|
|
3d3dc8 |
+ * since they don't do anything illegal even when the variable is uninitialized
|
|
|
3d3dc8 |
+ */
|
|
|
3d3dc8 |
+predicate cleanupFunctionDenyList(string fun) {
|
|
|
3d3dc8 |
+ fun = "erase_char"
|
|
|
3d3dc8 |
+}
|
|
|
3d3dc8 |
+
|
|
|
3d3dc8 |
/**
|
|
|
3d3dc8 |
* A declaration of a local variable using __attribute__((__cleanup__(x)))
|
|
|
3d3dc8 |
* that leaves the variable uninitialized.
|
|
|
3d3dc8 |
@@ -43,6 +50,8 @@ DeclStmt declWithNoInit(LocalVariable v) {
|
|
|
3d3dc8 |
not exists(v.getInitializer()) and
|
|
|
3d3dc8 |
/* The variable has __attribute__((__cleanup__(...))) set */
|
|
|
3d3dc8 |
v.getAnAttribute().hasName("cleanup") and
|
|
|
3d3dc8 |
+ /* Check if the cleanup function is not on a deny list */
|
|
|
3d3dc8 |
+ not exists(Attribute a | a = v.getAnAttribute() and a.getName() = "cleanup" | cleanupFunctionDenyList(a.getAnArgument().getValueText())) and
|
|
|
3d3dc8 |
/* The type of the variable is not stack-allocated. */
|
|
|
3d3dc8 |
exists(Type t | t = v.getType() | not allocatedType(t))
|
|
|
3d3dc8 |
}
|