mirror of
https://github.com/github/codeql.git
synced 2025-12-21 03:06:31 +01:00
Merge pull request #16333 from MathiasVP/fix-guards-on-pointers
This commit is contained in:
@@ -1156,5 +1156,14 @@ private predicate add_eq(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class IntegerOrPointerConstantInstruction extends ConstantInstruction {
|
||||||
|
IntegerOrPointerConstantInstruction() {
|
||||||
|
this instanceof IntegerConstantInstruction or
|
||||||
|
this instanceof PointerConstantInstruction
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** The int value of integer constant expression. */
|
/** The int value of integer constant expression. */
|
||||||
private int int_value(Instruction i) { result = i.(IntegerConstantInstruction).getValue().toInt() }
|
private int int_value(Instruction i) {
|
||||||
|
result = i.(IntegerOrPointerConstantInstruction).getValue().toInt()
|
||||||
|
}
|
||||||
|
|||||||
@@ -994,9 +994,8 @@ class ConstantInstruction extends ConstantValueInstruction {
|
|||||||
*/
|
*/
|
||||||
class IntegerConstantInstruction extends ConstantInstruction {
|
class IntegerConstantInstruction extends ConstantInstruction {
|
||||||
IntegerConstantInstruction() {
|
IntegerConstantInstruction() {
|
||||||
exists(IRType resultType |
|
exists(IRType resultType | resultType = this.getResultIRType() |
|
||||||
resultType = this.getResultIRType() and
|
resultType instanceof IRIntegerType or resultType instanceof IRBooleanType
|
||||||
(resultType instanceof IRIntegerType or resultType instanceof IRBooleanType)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1008,6 +1007,17 @@ class FloatConstantInstruction extends ConstantInstruction {
|
|||||||
FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType }
|
FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instruction whose result is a constant value of a pointer type.
|
||||||
|
*/
|
||||||
|
class PointerConstantInstruction extends ConstantInstruction {
|
||||||
|
PointerConstantInstruction() {
|
||||||
|
exists(IRType resultType | resultType = this.getResultIRType() |
|
||||||
|
resultType instanceof IRAddressType or resultType instanceof IRFunctionAddressType
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An instruction whose result is the address of a string literal.
|
* An instruction whose result is the address of a string literal.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -994,9 +994,8 @@ class ConstantInstruction extends ConstantValueInstruction {
|
|||||||
*/
|
*/
|
||||||
class IntegerConstantInstruction extends ConstantInstruction {
|
class IntegerConstantInstruction extends ConstantInstruction {
|
||||||
IntegerConstantInstruction() {
|
IntegerConstantInstruction() {
|
||||||
exists(IRType resultType |
|
exists(IRType resultType | resultType = this.getResultIRType() |
|
||||||
resultType = this.getResultIRType() and
|
resultType instanceof IRIntegerType or resultType instanceof IRBooleanType
|
||||||
(resultType instanceof IRIntegerType or resultType instanceof IRBooleanType)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1008,6 +1007,17 @@ class FloatConstantInstruction extends ConstantInstruction {
|
|||||||
FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType }
|
FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instruction whose result is a constant value of a pointer type.
|
||||||
|
*/
|
||||||
|
class PointerConstantInstruction extends ConstantInstruction {
|
||||||
|
PointerConstantInstruction() {
|
||||||
|
exists(IRType resultType | resultType = this.getResultIRType() |
|
||||||
|
resultType instanceof IRAddressType or resultType instanceof IRFunctionAddressType
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An instruction whose result is the address of a string literal.
|
* An instruction whose result is the address of a string literal.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -994,9 +994,8 @@ class ConstantInstruction extends ConstantValueInstruction {
|
|||||||
*/
|
*/
|
||||||
class IntegerConstantInstruction extends ConstantInstruction {
|
class IntegerConstantInstruction extends ConstantInstruction {
|
||||||
IntegerConstantInstruction() {
|
IntegerConstantInstruction() {
|
||||||
exists(IRType resultType |
|
exists(IRType resultType | resultType = this.getResultIRType() |
|
||||||
resultType = this.getResultIRType() and
|
resultType instanceof IRIntegerType or resultType instanceof IRBooleanType
|
||||||
(resultType instanceof IRIntegerType or resultType instanceof IRBooleanType)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1008,6 +1007,17 @@ class FloatConstantInstruction extends ConstantInstruction {
|
|||||||
FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType }
|
FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instruction whose result is a constant value of a pointer type.
|
||||||
|
*/
|
||||||
|
class PointerConstantInstruction extends ConstantInstruction {
|
||||||
|
PointerConstantInstruction() {
|
||||||
|
exists(IRType resultType | resultType = this.getResultIRType() |
|
||||||
|
resultType instanceof IRAddressType or resultType instanceof IRFunctionAddressType
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An instruction whose result is the address of a string literal.
|
* An instruction whose result is the address of a string literal.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ astGuardsCompare
|
|||||||
| 17 | y < 1+1 when ... > ... is false |
|
| 17 | y < 1+1 when ... > ... is false |
|
||||||
| 17 | y >= 1+1 when ... && ... is true |
|
| 17 | y >= 1+1 when ... && ... is true |
|
||||||
| 17 | y >= 1+1 when ... > ... is true |
|
| 17 | y >= 1+1 when ... > ... is true |
|
||||||
|
| 18 | call to get != 0 when call to get is true |
|
||||||
|
| 18 | call to get == 0 when call to get is false |
|
||||||
| 26 | 0 < x+0 when ... > ... is true |
|
| 26 | 0 < x+0 when ... > ... is true |
|
||||||
| 26 | 0 >= x+0 when ... > ... is false |
|
| 26 | 0 >= x+0 when ... > ... is false |
|
||||||
| 26 | x < 0+1 when ... > ... is false |
|
| 26 | x < 0+1 when ... > ... is false |
|
||||||
@@ -487,6 +489,7 @@ astGuardsEnsure_const
|
|||||||
| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 |
|
| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 |
|
||||||
| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | != | 0 | 175 | 175 |
|
| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | != | 0 | 175 | 175 |
|
||||||
| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | == | 0 | 175 | 175 |
|
| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | == | 0 | 175 | 175 |
|
||||||
|
| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 |
|
||||||
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 |
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 |
|
||||||
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 |
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 |
|
||||||
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 |
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 |
|
||||||
@@ -545,6 +548,8 @@ irGuardsCompare
|
|||||||
| 17 | y < 2 when CompareGT: ... > ... is false |
|
| 17 | y < 2 when CompareGT: ... > ... is false |
|
||||||
| 17 | y >= 1+1 when CompareGT: ... > ... is true |
|
| 17 | y >= 1+1 when CompareGT: ... > ... is true |
|
||||||
| 17 | y >= 2 when CompareGT: ... > ... is true |
|
| 17 | y >= 2 when CompareGT: ... > ... is true |
|
||||||
|
| 18 | call to get != 0 when CompareNE: (bool)... is true |
|
||||||
|
| 18 | call to get == 0 when CompareNE: (bool)... is false |
|
||||||
| 26 | 0 < x+0 when CompareGT: ... > ... is true |
|
| 26 | 0 < x+0 when CompareGT: ... > ... is true |
|
||||||
| 26 | 0 >= x+0 when CompareGT: ... > ... is false |
|
| 26 | 0 >= x+0 when CompareGT: ... > ... is false |
|
||||||
| 26 | x < 0+1 when CompareGT: ... > ... is false |
|
| 26 | x < 0+1 when CompareGT: ... > ... is false |
|
||||||
@@ -996,6 +1001,7 @@ irGuardsEnsure_const
|
|||||||
| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | 0 | 113 | 113 |
|
| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | 0 | 113 | 113 |
|
||||||
| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 |
|
| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 |
|
||||||
| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 |
|
| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 |
|
||||||
|
| test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:10 | Call: call to get | != | 0 | 19 | 19 |
|
||||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 |
|
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 |
|
||||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 |
|
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 |
|
||||||
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 |
|
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 |
|
||||||
|
|||||||
@@ -32,3 +32,7 @@
|
|||||||
| test.cpp:61:10:61:10 | i |
|
| test.cpp:61:10:61:10 | i |
|
||||||
| test.cpp:74:10:74:10 | i |
|
| test.cpp:74:10:74:10 | i |
|
||||||
| test.cpp:84:10:84:10 | i |
|
| test.cpp:84:10:84:10 | i |
|
||||||
|
| test.cpp:93:6:93:6 | c |
|
||||||
|
| test.cpp:99:6:99:6 | f |
|
||||||
|
| test.cpp:105:6:105:14 | ... != ... |
|
||||||
|
| test.cpp:111:6:111:14 | ... != ... |
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
| 17 | y >= 1+1 when ... > ... is true |
|
| 17 | y >= 1+1 when ... > ... is true |
|
||||||
| 17 | y >= 2 when ... && ... is true |
|
| 17 | y >= 2 when ... && ... is true |
|
||||||
| 17 | y >= 2 when ... > ... is true |
|
| 17 | y >= 2 when ... > ... is true |
|
||||||
|
| 18 | call to get != 0 when call to get is true |
|
||||||
|
| 18 | call to get == 0 when call to get is false |
|
||||||
| 26 | 0 < x+0 when ... > ... is true |
|
| 26 | 0 < x+0 when ... > ... is true |
|
||||||
| 26 | 0 >= x+0 when ... > ... is false |
|
| 26 | 0 >= x+0 when ... > ... is false |
|
||||||
| 26 | x < 0+1 when ... > ... is false |
|
| 26 | x < 0+1 when ... > ... is false |
|
||||||
@@ -107,6 +109,8 @@
|
|||||||
| 85 | y != 0+0 when ... && ... is true |
|
| 85 | y != 0+0 when ... && ... is true |
|
||||||
| 85 | y == 0 when ... != ... is false |
|
| 85 | y == 0 when ... != ... is false |
|
||||||
| 85 | y == 0+0 when ... != ... is false |
|
| 85 | y == 0+0 when ... != ... is false |
|
||||||
|
| 93 | c != 0 when c is true |
|
||||||
|
| 93 | c == 0 when c is false |
|
||||||
| 94 | 0 != x+0 when ... != ... is true |
|
| 94 | 0 != x+0 when ... != ... is true |
|
||||||
| 94 | 0 == x+0 when ... != ... is false |
|
| 94 | 0 == x+0 when ... != ... is false |
|
||||||
| 94 | x != 0 when ... != ... is true |
|
| 94 | x != 0 when ... != ... is true |
|
||||||
@@ -119,6 +123,10 @@
|
|||||||
| 102 | j < 10+0 when ... < ... is true |
|
| 102 | j < 10+0 when ... < ... is true |
|
||||||
| 102 | j >= 10 when ... < ... is false |
|
| 102 | j >= 10 when ... < ... is false |
|
||||||
| 102 | j >= 10+0 when ... < ... is false |
|
| 102 | j >= 10+0 when ... < ... is false |
|
||||||
|
| 105 | 0.0 != f+0 when ... != ... is true |
|
||||||
|
| 105 | 0.0 == f+0 when ... != ... is false |
|
||||||
|
| 105 | f != 0.0+0 when ... != ... is true |
|
||||||
|
| 105 | f == 0.0+0 when ... != ... is false |
|
||||||
| 109 | 0 != x+0 when ... == ... is false |
|
| 109 | 0 != x+0 when ... == ... is false |
|
||||||
| 109 | 0 != x+0 when ... \|\| ... is false |
|
| 109 | 0 != x+0 when ... \|\| ... is false |
|
||||||
| 109 | 0 < y+1 when ... < ... is false |
|
| 109 | 0 < y+1 when ... < ... is false |
|
||||||
@@ -137,3 +145,7 @@
|
|||||||
| 109 | y >= 0 when ... \|\| ... is false |
|
| 109 | y >= 0 when ... \|\| ... is false |
|
||||||
| 109 | y >= 0+0 when ... < ... is false |
|
| 109 | y >= 0+0 when ... < ... is false |
|
||||||
| 109 | y >= 0+0 when ... \|\| ... is false |
|
| 109 | y >= 0+0 when ... \|\| ... is false |
|
||||||
|
| 111 | 0.0 != i+0 when ... != ... is true |
|
||||||
|
| 111 | 0.0 == i+0 when ... != ... is false |
|
||||||
|
| 111 | i != 0.0+0 when ... != ... is true |
|
||||||
|
| 111 | i == 0.0+0 when ... != ... is false |
|
||||||
|
|||||||
@@ -90,3 +90,7 @@
|
|||||||
| test.cpp:61:10:61:10 | i | Case[1] | 65 | 66 |
|
| test.cpp:61:10:61:10 | i | Case[1] | 65 | 66 |
|
||||||
| test.cpp:74:10:74:10 | i | Case[0..10] | 75 | 77 |
|
| test.cpp:74:10:74:10 | i | Case[0..10] | 75 | 77 |
|
||||||
| test.cpp:74:10:74:10 | i | Case[11..20] | 78 | 79 |
|
| test.cpp:74:10:74:10 | i | Case[11..20] | 78 | 79 |
|
||||||
|
| test.cpp:93:6:93:6 | c | true | 93 | 94 |
|
||||||
|
| test.cpp:99:6:99:6 | f | true | 99 | 100 |
|
||||||
|
| test.cpp:105:6:105:14 | ... != ... | true | 105 | 106 |
|
||||||
|
| test.cpp:111:6:111:14 | ... != ... | true | 111 | 112 |
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
binary
|
||||||
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | test.c:7:13:7:13 | 0 | 1 | 10 | 11 |
|
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | test.c:7:13:7:13 | 0 | 1 | 10 | 11 |
|
||||||
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | test.c:7:13:7:13 | 0 | 1 | 7 | 9 |
|
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | test.c:7:13:7:13 | 0 | 1 | 7 | 9 |
|
||||||
| test.c:7:9:7:13 | ... > ... | test.c:7:13:7:13 | 0 | < | test.c:7:9:7:9 | x | 0 | 7 | 9 |
|
| test.c:7:9:7:13 | ... > ... | test.c:7:13:7:13 | 0 | < | test.c:7:9:7:9 | x | 0 | 7 | 9 |
|
||||||
@@ -154,3 +155,94 @@
|
|||||||
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 34 | 34 |
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 34 | 34 |
|
||||||
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 |
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 |
|
||||||
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 |
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 |
|
||||||
|
| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:6 | f | != | test.cpp:105:11:105:14 | 0.0 | 0 | 105 | 106 |
|
||||||
|
| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:11:105:14 | 0.0 | != | test.cpp:105:6:105:6 | f | 0 | 105 | 106 |
|
||||||
|
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:6 | i | != | test.cpp:111:11:111:14 | 0.0 | 0 | 111 | 112 |
|
||||||
|
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:11:111:14 | 0.0 | != | test.cpp:111:6:111:6 | i | 0 | 111 | 112 |
|
||||||
|
unary
|
||||||
|
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | 10 | 11 |
|
||||||
|
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | 7 | 9 |
|
||||||
|
| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | 17 | 17 |
|
||||||
|
| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | 18 | 18 |
|
||||||
|
| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:8 | x | < | 0 | 18 | 18 |
|
||||||
|
| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:17 | y | >= | 2 | 18 | 18 |
|
||||||
|
| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:17 | y | >= | 2 | 18 | 18 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 2 | 2 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 31 | 34 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 34 | 34 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 39 | 42 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 42 | 42 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 42 | 44 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 45 | 45 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 45 | 47 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 51 | 53 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 56 | 58 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 58 | 58 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 58 | 66 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 62 | 62 |
|
||||||
|
| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | >= | 1 | 26 | 28 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | < | 10 | 34 | 34 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 2 | 2 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 39 | 42 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 42 | 42 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 42 | 44 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 45 | 45 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 45 | 47 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 51 | 53 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 56 | 58 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 58 | 58 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 58 | 66 |
|
||||||
|
| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 62 | 62 |
|
||||||
|
| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 42 | 42 |
|
||||||
|
| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 42 | 44 |
|
||||||
|
| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 45 | 45 |
|
||||||
|
| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 45 | 47 |
|
||||||
|
| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 51 | 53 |
|
||||||
|
| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | 42 | 42 |
|
||||||
|
| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | 51 | 53 |
|
||||||
|
| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | 45 | 45 |
|
||||||
|
| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | 45 | 47 |
|
||||||
|
| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | 1 | 45 | 47 |
|
||||||
|
| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 |
|
||||||
|
| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 |
|
||||||
|
| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 |
|
||||||
|
| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:19 | y | >= | 0 | 62 | 62 |
|
||||||
|
| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:19 | y | >= | 0 | 62 | 62 |
|
||||||
|
| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 |
|
||||||
|
| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 |
|
||||||
|
| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 |
|
||||||
|
| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 |
|
||||||
|
| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 |
|
||||||
|
| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 |
|
||||||
|
| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 102 | 102 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 107 | 109 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 |
|
||||||
|
| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 |
|
||||||
|
| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | < | 10 | 102 | 102 |
|
||||||
|
| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 70 | 70 |
|
||||||
|
| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 107 | 109 |
|
||||||
|
| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 109 | 109 |
|
||||||
|
| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 109 | 117 |
|
||||||
|
| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 113 | 113 |
|
||||||
|
| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 |
|
||||||
|
| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 |
|
||||||
|
| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 |
|
||||||
|
| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:19 | y | >= | 0 | 113 | 113 |
|
||||||
|
| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | 0 | 113 | 113 |
|
||||||
|
| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 |
|
||||||
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 |
|
||||||
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 |
|
||||||
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 |
|
||||||
|
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 |
|
||||||
|
| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 0 | 62 | 64 |
|
||||||
|
| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 1 | 65 | 66 |
|
||||||
|
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 11 | 75 | 77 |
|
||||||
|
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 21 | 78 | 79 |
|
||||||
|
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 0 | 75 | 77 |
|
||||||
|
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 11 | 78 | 79 |
|
||||||
|
| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | != | 0 | 93 | 94 |
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
import cpp
|
import cpp
|
||||||
import semmle.code.cpp.controlflow.Guards
|
import semmle.code.cpp.controlflow.Guards
|
||||||
|
|
||||||
from GuardCondition guard, Expr left, Expr right, int k, int start, int end, string op
|
query predicate binary(
|
||||||
where
|
GuardCondition guard, Expr left, string op, Expr right, int k, int start, int end
|
||||||
|
) {
|
||||||
exists(BasicBlock block |
|
exists(BasicBlock block |
|
||||||
guard.ensuresLt(left, right, k, block, true) and op = "<"
|
guard.ensuresLt(left, right, k, block, true) and op = "<"
|
||||||
or
|
or
|
||||||
@@ -20,4 +21,18 @@ where
|
|||||||
|
|
|
|
||||||
block.hasLocationInfo(_, start, _, end, _)
|
block.hasLocationInfo(_, start, _, end, _)
|
||||||
)
|
)
|
||||||
select guard, left, op, right, k, start, end
|
}
|
||||||
|
|
||||||
|
query predicate unary(GuardCondition guard, Expr left, string op, int k, int start, int end) {
|
||||||
|
exists(BasicBlock block |
|
||||||
|
guard.ensuresLt(left, k, block, true) and op = "<"
|
||||||
|
or
|
||||||
|
guard.ensuresLt(left, k, block, false) and op = ">="
|
||||||
|
or
|
||||||
|
guard.ensuresEq(left, k, block, true) and op = "=="
|
||||||
|
or
|
||||||
|
guard.ensuresEq(left, k, block, false) and op = "!="
|
||||||
|
|
|
||||||
|
block.hasLocationInfo(_, start, _, end, _)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -86,3 +86,29 @@ void test_switches_default(int i) {
|
|||||||
use1(i);
|
use1(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void use(...);
|
||||||
|
|
||||||
|
void pointer_comparison(char* c) {
|
||||||
|
if(c) {
|
||||||
|
use(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void implicit_float_comparison(float f) {
|
||||||
|
if(f) {
|
||||||
|
use(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void explicit_float_comparison(float f) {
|
||||||
|
if(f != 0.0f) {
|
||||||
|
use(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void int_float_comparison(int i) {
|
||||||
|
if(i != 0.0f) {
|
||||||
|
use(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user