Skip to content

Commit c596624

Browse files
author
Nikita Kraiouchkine
committed
Add comments to EXP37-C and EXP46-C
1 parent 634cb3b commit c596624

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

c/cert/src/rules/EXP37-C/DoNotCallFunctionPointerWithIncompatibleType.ql

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ import codingstandards.c.cert
1616
import semmle.code.cpp.dataflow.DataFlow
1717
import DataFlow::PathGraph
1818

19-
class SuspectFunctionPointerCastExpr extends Expr {
20-
SuspectFunctionPointerCastExpr() {
19+
/**
20+
* An expression of type `FunctionPointer` which is the unconverted expression of a cast
21+
* which converts the function pointer to a pointer to a function of a different type.
22+
*/
23+
class SuspiciousFunctionPointerCastExpr extends Expr {
24+
SuspiciousFunctionPointerCastExpr() {
2125
exists(CStyleCast cast, Type old, Type new |
2226
this = cast.getUnconverted() and
2327
old = cast.getUnconverted().getUnderlyingType() and
@@ -29,11 +33,15 @@ class SuspectFunctionPointerCastExpr extends Expr {
2933
}
3034
}
3135

36+
/**
37+
* Data-flow configuration for flow from a `SuspiciousFunctionPointerCastExpr`
38+
* to a call of the function pointer resulting from the function pointer cast
39+
*/
3240
class SuspectFunctionPointerToCallConfig extends DataFlow::Configuration {
3341
SuspectFunctionPointerToCallConfig() { this = "SuspectFunctionPointerToCallConfig" }
3442

3543
override predicate isSource(DataFlow::Node src) {
36-
src.asExpr() instanceof SuspectFunctionPointerCastExpr
44+
src.asExpr() instanceof SuspiciousFunctionPointerCastExpr
3745
}
3846

3947
override predicate isSink(DataFlow::Node sink) {

c/cert/src/rules/EXP46-C/DoNotUseABitwiseOperatorWithABooleanLikeOperand.ql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@
1515
import cpp
1616
import codingstandards.c.cert
1717

18+
/**
19+
* Holds if `op` is a bitwise AND, OR, or XOR expression
20+
*/
1821
predicate isBitwiseOperationPotentiallyAmbiguous(BinaryBitwiseOperation op) {
1922
op instanceof BitwiseAndExpr or
2023
op instanceof BitwiseOrExpr or
2124
op instanceof BitwiseXorExpr
2225
}
2326

27+
/**
28+
* Holds if `e` is an unparenthesised boolean expression,
29+
* relational operation, or equality operation.
30+
*/
2431
predicate isDisallowedBitwiseOperationOperand(Expr e) {
2532
not e.isParenthesised() and
2633
(

0 commit comments

Comments
 (0)