mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 07:49:59 -04:00
Fix cppcheck 1.89 warnings
cppcheck 1.89 enabled certain value flow analysis mechanisms [1] which
trigger null pointer dereference false positives in lib/dns/rpz.c:
lib/dns/rpz.c:582:7: warning: Possible null pointer dereference: tgt_ip [nullPointer]
if (KEY_IS_IPV4(tgt_prefix, tgt_ip)) {
^
lib/dns/rpz.c:1419:44: note: Calling function 'adj_trigger_cnt', 4th argument 'NULL' value is 0
adj_trigger_cnt(rpzs, rpz_num, rpz_type, NULL, 0, true);
^
lib/dns/rpz.c:582:7: note: Null pointer dereference
if (KEY_IS_IPV4(tgt_prefix, tgt_ip)) {
^
lib/dns/rpz.c:596:7: warning: Possible null pointer dereference: tgt_ip [nullPointer]
if (KEY_IS_IPV4(tgt_prefix, tgt_ip)) {
^
lib/dns/rpz.c:1419:44: note: Calling function 'adj_trigger_cnt', 4th argument 'NULL' value is 0
adj_trigger_cnt(rpzs, rpz_num, rpz_type, NULL, 0, true);
^
lib/dns/rpz.c:596:7: note: Null pointer dereference
if (KEY_IS_IPV4(tgt_prefix, tgt_ip)) {
^
lib/dns/rpz.c:610:7: warning: Possible null pointer dereference: tgt_ip [nullPointer]
if (KEY_IS_IPV4(tgt_prefix, tgt_ip)) {
^
lib/dns/rpz.c:1419:44: note: Calling function 'adj_trigger_cnt', 4th argument 'NULL' value is 0
adj_trigger_cnt(rpzs, rpz_num, rpz_type, NULL, 0, true);
^
lib/dns/rpz.c:610:7: note: Null pointer dereference
if (KEY_IS_IPV4(tgt_prefix, tgt_ip)) {
^
It seems that cppcheck no longer treats at least some REQUIRE()
assertion failures as fatal, so add extra assertion macro definitions to
lib/isc/include/isc/util.h that are only used when the CPPCHECK
preprocessor macro is defined; these definitions make cppcheck 1.89
behave as expected.
There is an important requirement for these custom definitions to work:
cppcheck must properly treat abort() as a function which does not
return. In order for that to happen, the __GNUC__ macro must be set to
a high enough number (because system include directories are used and
system headers compile attributes away if __GNUC__ is not high enough).
__GNUC__ is thus set to the major version number of the GCC compiler
used, which is what that latter does itself during compilation.
[1] aaeec462e6
This commit is contained in:
parent
15b8f92a5a
commit
abfde3d543
2 changed files with 19 additions and 0 deletions
|
|
@ -256,6 +256,9 @@ stages:
|
|||
.cppcheck: &cppcheck_job
|
||||
<<: *default_triggering_rules
|
||||
stage: postcheck
|
||||
before_script:
|
||||
- export GCC_VERSION=$(gcc --version | sed -n 's/.*\([0-9]\+\)\.[0-9]\+\.[0-9]\+.*/\1/p')
|
||||
- sed -i "/gcc\",/a\"-DCPPCHECK\", \"-D__STDC__\", \"-D__GNUC__=${GCC_VERSION}\"," compile_commands.json
|
||||
script:
|
||||
- *run_cppcheck
|
||||
after_script:
|
||||
|
|
|
|||
|
|
@ -234,6 +234,9 @@ extern void mock_assert(const int result, const char* const expression,
|
|||
#define _assert_int_not_equal(a, b, f, l) \
|
||||
(((a) != (b)) ? (void)0 : (_assert_int_not_equal(a, b, f, l), abort()))
|
||||
#else /* UNIT_TESTING */
|
||||
|
||||
#ifndef CPPCHECK
|
||||
|
||||
/*
|
||||
* Assertions
|
||||
*/
|
||||
|
|
@ -248,6 +251,19 @@ extern void mock_assert(const int result, const char* const expression,
|
|||
/*% Invariant Assertion */
|
||||
#define INVARIANT(e) ISC_INVARIANT(e)
|
||||
|
||||
#else /* CPPCHECK */
|
||||
|
||||
/*% Require Assertion */
|
||||
#define REQUIRE(e) if (!(e)) abort()
|
||||
/*% Ensure Assertion */
|
||||
#define ENSURE(e) if (!(e)) abort()
|
||||
/*% Insist Assertion */
|
||||
#define INSIST(e) if (!(e)) abort()
|
||||
/*% Invariant Assertion */
|
||||
#define INVARIANT(e) if (!(e)) abort()
|
||||
|
||||
#endif /* CPPCHECK */
|
||||
|
||||
#endif /* UNIT_TESTING */
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue