From 5f6f72ba8e759e25e81df1818f025bad1435ca9b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 16 Nov 2022 15:05:07 +0100 Subject: [PATCH 1/2] Kotlin: Add FP test case for ignored return value query --- .../ReturnValueIgnored.expected | 1 + .../ReturnValueIgnored/ReturnValueIgnored.qlref | 1 + .../query-tests/ReturnValueIgnored/Test.kt | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected create mode 100644 java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.qlref create mode 100644 java/ql/test/kotlin/query-tests/ReturnValueIgnored/Test.kt diff --git a/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected new file mode 100644 index 000000000000..8088b356482e --- /dev/null +++ b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected @@ -0,0 +1 @@ +| Test.kt:14:29:14:33 | foo(...) | The result of the call is ignored, but 90% of calls to foo use the return value. | diff --git a/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.qlref b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.qlref new file mode 100644 index 000000000000..ef1dc964d955 --- /dev/null +++ b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.qlref @@ -0,0 +1 @@ +Likely Bugs/Statements/ReturnValueIgnored.ql \ No newline at end of file diff --git a/java/ql/test/kotlin/query-tests/ReturnValueIgnored/Test.kt b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/Test.kt new file mode 100644 index 000000000000..8520b3cedfc9 --- /dev/null +++ b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/Test.kt @@ -0,0 +1,16 @@ +class Foo { + fun foo(): Int { return 5 } + fun bar() { + val x0 = foo() + val x1 = foo() + val x2 = foo() + val x3 = foo() + val x4 = foo() + val x5 = foo() + val x6 = foo() + val x7 = foo() + val x8 = foo() + val x9 = foo() + val x = if (true) { foo() } else 6 + } +} From c42663723f197030c2d06adf28679001aaf52dd2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 16 Nov 2022 15:05:29 +0100 Subject: [PATCH 2/2] Exclude .kt files from ignored return value query --- java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql | 1 + .../query-tests/ReturnValueIgnored/ReturnValueIgnored.expected | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql b/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql index 3355fd22190c..c50a9a5f1a48 100644 --- a/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql +++ b/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql @@ -75,6 +75,7 @@ predicate isMustBeQualifierMockingMethod(Method m) { predicate relevantMethodCall(MethodAccess ma, Method m) { // For "return value ignored", all method calls are relevant. + not ma.getFile().isKotlinSourceFile() and ma.getMethod() = m and not m.getReturnType().hasName("void") and (not isMockingMethod(m) or isMustBeQualifierMockingMethod(m)) and diff --git a/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected index 8088b356482e..e69de29bb2d1 100644 --- a/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected +++ b/java/ql/test/kotlin/query-tests/ReturnValueIgnored/ReturnValueIgnored.expected @@ -1 +0,0 @@ -| Test.kt:14:29:14:33 | foo(...) | The result of the call is ignored, but 90% of calls to foo use the return value. |