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