mirror of
https://github.com/github/codeql.git
synced 2026-07-05 03:25:31 +02:00
Some files that will change in #1736 have been spared. ./build -j4 target/jars/qlformat find ql/cpp/ql -name "*.ql" -print0 | xargs -0 target/jars/qlformat --input find ql/cpp/ql -name "*.qll" -print0 | xargs -0 target/jars/qlformat --input (cd ql && git checkout 'cpp/ql/src/semmle/code/cpp/ir/implementation/**/*SSA*.qll') buildutils-internal/scripts/pr-checks/sync-identical-files.py --latest
29 lines
900 B
Plaintext
29 lines
900 B
Plaintext
/**
|
|
* @name Invalid function pointer conversion
|
|
* @description Conversions shall not be performed between a pointer to a function and any type other than an integral type.
|
|
* @kind problem
|
|
* @id cpp/jpl-c/function-pointer-conversions
|
|
* @problem.severity warning
|
|
* @precision low
|
|
* @tags correctness
|
|
* external/jpl
|
|
*/
|
|
|
|
import cpp
|
|
|
|
predicate permissibleConversion(Type t) {
|
|
t instanceof IntegralType or
|
|
t instanceof FunctionPointerType or
|
|
permissibleConversion(t.getUnspecifiedType()) or
|
|
permissibleConversion(t.(TypedefType).getBaseType()) or
|
|
permissibleConversion(t.(ReferenceType).getBaseType())
|
|
}
|
|
|
|
from Expr e, Type converted
|
|
where
|
|
e.getType() instanceof FunctionPointerType and
|
|
e.getFullyConverted().getType() = converted and
|
|
not permissibleConversion(converted)
|
|
select e,
|
|
"Function pointer converted to " + converted.getName() + ", which is not an integral type."
|