Skip to content
  • Michał Kępień's avatar
    Fix cppcheck 1.89 warnings · abfde3d5
    Michał Kępień authored
    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] https://github.com/danmar/cppcheck/commit/aaeec462e6d96bb70c2b1cf030979d09e2d7c959
    abfde3d5
Validating GitLab CI configuration… Learn more