Commit 41b4af5d authored by Michał Kępień's avatar Michał Kępień
Browse files

Work around cppcheck 2.0 uninitvar false positives

cppcheck 2.0 reports false positives about uninitialized variables in a
lot of places throughout BIND source code, e.g.:

    bin/dig/host.c:386:24: error: Uninitialized variable: length [uninitvar]
     printf("%.*s", (int)r.length, (char *)r.base);

Apparently cppcheck 2.0 has issues with processing (&var)->field syntax,
which is what the macros from lib/isc/include/isc/buffer.h are evaluated
to.  This issue was reported upstream [1] and will hopefully be
addressed in a future cppcheck release.

In the meantime, to avoid modifying BIND source code in multiple places
just because of a static checker false positive, work around the issue
by adding intermediate variables to buffer macro definitions using a sed
invocation in the cppcheck job script.


(cherry picked from commit 481fa34e)
parent b5608306
Pipeline #41981 canceled with stages
in 2 minutes and 21 seconds
......@@ -352,6 +352,9 @@ stages:
<<: *default_triggering_rules
stage: postcheck
# Workaround for cppcheck 2.0 uninitvar false positives triggered by (&var)->field syntax
# (see:
- sed -i '/^#define ISC__BUFFER.*\\$/{s|_b|__b|;N;s|do {|\0 isc_buffer_t *_b = (isc_buffer_t *)__b;|}; /^#define ISC__BUFFER.*REGION.*\\$/{s|_r|__r|;N;s|do {|\0 isc_region_t *_r = (isc_region_t *)__r;|; /USEDREGION/{s|isc_buffer_t|const \0|g}}' lib/isc/include/isc/buffer.h
- *configure
- (make -nwk all || true) | compiledb
- export GCC_VERSION=$(gcc --version | sed -n 's/.* \([0-9]\+\)\.[0-9]\+\.[0-9]\+.*/\1/p')
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment