From: Michał Kępień Date: Mon, 18 May 2020 08:23:06 +0000 (+0200) Subject: Work around cppcheck 2.0 uninitvar false positives X-Git-Tag: v9.17.2~70^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=481fa34e50a6183273f71175adf93bfb12cad1e9;p=thirdparty%2Fbind9.git 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/dnssec/dnssec-cds.c:283:6: error: Uninitialized variable: length [uninitvar] if (isc_buffer_availablelength(&buf) <= len) { ^ 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. [1] https://sourceforge.net/p/cppcheck/discussion/general/thread/122153e3c1/ --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index de72ea5a904..3f47a8262b4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -353,6 +353,9 @@ stages: <<: *default_triggering_rules stage: postcheck script: + # Workaround for cppcheck 2.0 uninitvar false positives triggered by (&var)->field syntax + # (see: https://sourceforge.net/p/cppcheck/discussion/general/thread/122153e3c1/) + - 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')