Skip to content

Commit 8483c76

Browse files
committed
java/ql/src: update queries
1 parent 3fafb85 commit 8483c76

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

java/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql

+7-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import semmle.code.java.dataflow.RangeAnalysis
2121
import semmle.code.java.Conversions
2222

2323
/** Gets an upper bound on the absolute value of `e`. */
24-
float exprBound(Expr e) {
25-
result = e.(ConstantIntegerExpr).getIntValue().(float).abs()
24+
QlBuiltins::BigInt exprBound(Expr e) {
25+
result = e.(ConstantIntegerExpr).getIntValue().abs()
2626
or
27-
exists(float lower, float upper |
27+
exists(QlBuiltins::BigInt lower, QlBuiltins::BigInt upper |
2828
bounded(e, any(ZeroBound zb), lower, false, _) and
2929
bounded(e, any(ZeroBound zb), upper, true, _) and
3030
result = upper.abs().maximum(lower.abs())
@@ -33,11 +33,13 @@ float exprBound(Expr e) {
3333

3434
/** A multiplication that does not overflow. */
3535
predicate small(MulExpr e) {
36-
exists(NumType t, float lhs, float rhs, float res | t = e.getType() |
36+
exists(NumType t, QlBuiltins::BigInt lhs, QlBuiltins::BigInt rhs, QlBuiltins::BigInt res |
37+
t = e.getType()
38+
|
3739
lhs = exprBound(e.getLeftOperand()) and
3840
rhs = exprBound(e.getRightOperand()) and
3941
lhs * rhs = res and
40-
res <= t.getOrdPrimitiveType().getMaxValue()
42+
res <= t.getOrdPrimitiveType().getMaxValue().toString().toBigInt()
4143
)
4244
}
4345

java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql

+6-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import semmle.code.java.dataflow.RangeAnalysis
2121
* Holds if the index expression of `aa` is less than or equal to the array length plus `k`.
2222
*/
2323
predicate boundedArrayAccess(ArrayAccess aa, int k) {
24-
exists(SsaVariable arr, Expr index, Bound b, int delta |
24+
exists(SsaVariable arr, Expr index, Bound b, QlBuiltins::BigInt delta |
2525
aa.getIndexExpr() = index and
2626
aa.getArray() = arr.getAUse() and
2727
bounded(index, b, delta, true, _)
@@ -30,28 +30,28 @@ predicate boundedArrayAccess(ArrayAccess aa, int k) {
3030
len.getField() instanceof ArrayLengthField and
3131
len.getQualifier() = arr.getAUse() and
3232
b.getExpr() = len and
33-
k = delta
33+
k = delta.toInt()
3434
)
3535
or
3636
exists(ArrayCreationExpr arraycreation | arraycreation = getArrayDef(arr) |
37-
k = delta and
37+
k = delta.toInt() and
3838
arraycreation.getDimension(0) = b.getExpr()
3939
or
4040
exists(int arrlen |
4141
arraycreation.getFirstDimensionSize() = arrlen and
4242
b instanceof ZeroBound and
43-
k = delta - arrlen
43+
k = (delta - arrlen.toBigInt()).toInt()
4444
)
4545
)
4646
)
4747
or
48-
exists(Field arr, Expr index, int delta, int arrlen |
48+
exists(Field arr, Expr index, QlBuiltins::BigInt delta, int arrlen |
4949
aa.getIndexExpr() = index and
5050
aa.getArray() = arr.getAnAccess() and
5151
bounded(index, any(ZeroBound z), delta, true, _) and
5252
arr.isFinal() and
5353
arr.getInitializer().(ArrayCreationExpr).getFirstDimensionSize() = arrlen and
54-
k = delta - arrlen
54+
k = (delta - arrlen.toBigInt()).toInt()
5555
)
5656
}
5757

java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql

+6-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ import semmle.code.java.dataflow.RangeAnalysis
2121
/** Holds if `cond` always evaluates to `isTrue`. */
2222
predicate constCond(BinaryExpr cond, boolean isTrue, Reason reason) {
2323
exists(
24-
ComparisonExpr comp, Expr lesser, Expr greater, Bound b, int d1, int d2, Reason r1, Reason r2
24+
ComparisonExpr comp, Expr lesser, Expr greater, Bound b, QlBuiltins::BigInt d1,
25+
QlBuiltins::BigInt d2, Reason r1, Reason r2
2526
|
2627
comp = cond and
2728
lesser = comp.getLesserOperand() and
@@ -49,7 +50,9 @@ predicate constCond(BinaryExpr cond, boolean isTrue, Reason reason) {
4950
lhs = eq.getLeftOperand() and
5051
rhs = eq.getRightOperand()
5152
|
52-
exists(Bound b, int d1, int d2, boolean upper, Reason r1, Reason r2 |
53+
exists(
54+
Bound b, QlBuiltins::BigInt d1, QlBuiltins::BigInt d2, boolean upper, Reason r1, Reason r2
55+
|
5356
bounded(lhs, b, d1, upper, r1) and
5457
bounded(rhs, b, d2, upper.booleanNot(), r2) and
5558
isTrue = eq.polarity().booleanNot() and
@@ -65,7 +68,7 @@ predicate constCond(BinaryExpr cond, boolean isTrue, Reason reason) {
6568
upper = false and d1 > d2 // lhs >= b + d1 > b + d2 >= rhs
6669
)
6770
or
68-
exists(Bound b, int d, Reason r1, Reason r2, Reason r3, Reason r4 |
71+
exists(Bound b, QlBuiltins::BigInt d, Reason r1, Reason r2, Reason r3, Reason r4 |
6972
bounded(lhs, b, d, true, r1) and
7073
bounded(lhs, b, d, false, r2) and
7174
bounded(rhs, b, d, true, r3) and

0 commit comments

Comments
 (0)