prob-distr: Silence some coverity warnings.

This commit is contained in:
George Kadianakis 2019-03-21 20:57:42 +02:00 committed by Nick Mathewson
parent c81b2b09ea
commit 08176c2396
2 changed files with 17 additions and 1 deletions

3
changes/bug29805 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (probability distributions):
- Refactor and improve parts of the probability distribution code that made
Coverity complain. Fixes bug 29805; bugfix on 0.4.0.1-alpha.

View File

@ -19,9 +19,22 @@ struct dist {
const struct dist_ops *ops; const struct dist_ops *ops;
}; };
/** Assign the right ops to dist.dist_ops */
#define DIST_BASE(OPS) { .ops = (OPS) } #define DIST_BASE(OPS) { .ops = (OPS) }
/** A compile-time type-checking macro for use with DIST_BASE_TYPED. */
#ifdef __COVERITY___
/* Disable type-checking if coverity is enabled, since they don't like it */
#define TYPE_CHECK_OBJ(OPS, OBJ, TYPE) 0
#else
#define TYPE_CHECK_OBJ(OPS, OBJ, TYPE) \
(0*sizeof(&(OBJ) - (const TYPE *)&(OBJ)))
#endif
/** Macro to initialize a distribution with the right OPS, while making sure
* that OBJ is of the right TYPE */
#define DIST_BASE_TYPED(OPS, OBJ, TYPE) \ #define DIST_BASE_TYPED(OPS, OBJ, TYPE) \
DIST_BASE((OPS) + 0*sizeof(&(OBJ) - (const TYPE *)&(OBJ))) DIST_BASE((OPS) + TYPE_CHECK_OBJ(OPS,OBJ,TYPE))
const char *dist_name(const struct dist *); const char *dist_name(const struct dist *);
double dist_sample(const struct dist *); double dist_sample(const struct dist *);