[pulseaudio-discuss] [PATCH v2 01/10] build: Add Coverity scan model

Peter Meerwald-Stadler pmeerw at pmeerw.net
Mon Mar 6 07:43:13 UTC 2017


the modeling file help to avoid false positives and increase scanning
accuracy by explaining code Coverity can't see (out of tree libraries);
the model file must be uploaded by an admin to:
https://scan.coverity.com/projects/pulseaudio?tab=analysis_settings

the pa_assert_se() macro needs to be rewritten for Coverity so that
the assignment is not declared a side-effect

Signed-off-by: Peter Meerwald-Stadler <pmeerw at pmeerw.net>
Cc: Philip Withnall <philip at tecnocode.co.uk>
---
 coverity/model.c      | 18 ++++++++++++++++++
 src/pulsecore/macro.h |  9 +++++++++
 2 files changed, 27 insertions(+)
 create mode 100644 coverity/model.c

diff --git a/coverity/model.c b/coverity/model.c
new file mode 100644
index 0000000..afe7ca5
--- /dev/null
+++ b/coverity/model.c
@@ -0,0 +1,18 @@
+/* Coverity Scan model
+ * Copyright (C) 2017 Peter Meerwald-Stadler <pmeerw at pmeerw.net>
+ *
+ * This is a modeling file for Coverity Scan which helps to avoid false
+ * positives and increase scanning accuracy by explaining code Coverity
+ * can't see (out of tree libraries); the model file must be uploaded by
+ * an admin to:
+ * https://scan.coverity.com/projects/pulseaudio?tab=analysis_settings
+ */
+
+void fail(void) {
+    __coverity_panic__();
+}
+
+void fail_unless(int x) {
+    if (!x)
+        __coverity_panic__();
+}
diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h
index 2c5d5f2..dbce5cd 100644
--- a/src/pulsecore/macro.h
+++ b/src/pulsecore/macro.h
@@ -186,6 +186,7 @@ static inline size_t PA_ALIGN(size_t l) {
 
 /* pa_assert_se() is an assert which guarantees side effects of x,
  * i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */
+#ifndef __COVERITY__
 #define pa_assert_se(expr)                                              \
     do {                                                                \
         if (PA_UNLIKELY(!(expr))) {                                     \
@@ -193,6 +194,14 @@ static inline size_t PA_ALIGN(size_t l) {
             abort();                                                    \
         }                                                               \
     } while (false)
+#else
+#define pa_assert_se(expr)                                              \
+    do {                                                                \
+        int _unique_var = (expr);                                       \
+        if (!_unique_var)                                               \
+            abort();                                                    \
+    } while (false)
+#endif
 
 /* Does exactly nothing */
 #define pa_nop() do {} while (false)
-- 
2.7.4



More information about the pulseaudio-discuss mailing list