diff --git a/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql b/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql index d787598decc..8053fc56063 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql @@ -25,6 +25,11 @@ where not exists(MacroInvocation mi | mi.getAnAffectedElement() = add and not mi.getMacroName().toLowerCase().matches("%assert%") + ) and + // There must be a compilation of this file without a flag that makes pointer + // overflow well defined. + exists(Compilation c | c.getAFileCompiled() = ro.getFile() | + not c.getAnArgument() = "-fwrapv-pointer" and + not c.getAnArgument() = "-fno-strict-overflow" ) - // TODO: Add a check for -fno-strict-overflow and -fwrapv-pointer select ro, "Range check relying on pointer overflow." diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/PointerOverflow/PointerOverflow.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/PointerOverflow/PointerOverflow.expected index 91e711adca9..219588de6f2 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/PointerOverflow/PointerOverflow.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/PointerOverflow/PointerOverflow.expected @@ -1,3 +1,2 @@ -| no_strict_overflow.c:5:9:5:21 | ... < ... | Range check relying on pointer overflow. | | test.cpp:6:12:6:33 | ... < ... | Range check relying on pointer overflow. | | test.cpp:33:9:33:21 | ... < ... | Range check relying on pointer overflow. |