From cc13193cb6a909513294da7312f031381de38293 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 21 May 2025 14:16:11 +0200 Subject: [PATCH] Java: Replace some references to basicNullGuard. --- .../semmle/code/java/dataflow/NullGuards.qll | 19 +++++++++++++++---- .../ql/src/Language Abuse/UselessNullCheck.ql | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index 971fc3cf072..5fde238a4b6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -306,10 +306,21 @@ private Method customNullGuard(int index, boolean retval, boolean isnull) { } /** - * `guard` is a guard expression that suggests that `v` might be null. - * - * This is equivalent to `guard = basicNullGuard(sameValue(v, _), _, true)`. + * Holds if `guard` is a guard expression that suggests that `e` might be null. + */ +predicate guardSuggestsExprMaybeNull(Expr guard, Expr e) { + guard.(EqualityTest).hasOperands(e, any(NullLiteral n)) + or + exists(MethodCall call | + call = guard and + call.getAnArgument() = e and + nullCheckMethod(call.getMethod(), _, true) + ) +} + +/** + * Holds if `guard` is a guard expression that suggests that `v` might be null. */ predicate guardSuggestsVarMaybeNull(Expr guard, SsaVariable v) { - guard = basicNullGuard(sameValue(v, _), _, true) + guardSuggestsExprMaybeNull(guard, sameValue(v, _)) } diff --git a/java/ql/src/Language Abuse/UselessNullCheck.ql b/java/ql/src/Language Abuse/UselessNullCheck.ql index 1ad1c4c8e1e..d95b528c4c4 100644 --- a/java/ql/src/Language Abuse/UselessNullCheck.ql +++ b/java/ql/src/Language Abuse/UselessNullCheck.ql @@ -18,7 +18,7 @@ import semmle.code.java.controlflow.Guards from Expr guard, Expr e, Expr reason, string msg where - guard = basicNullGuard(e, _, true) and + guardSuggestsExprMaybeNull(guard, e) and e = clearlyNotNullExpr(reason) and ( if reason instanceof Guard