From 1c47084479ea040ecf3920019a3718542fa1a7a6 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 8 Jun 2026 15:43:58 +0100 Subject: [PATCH] Add result node test with SPURIOUS result --- .../go/dataflow/Nodes/ResultNode.expected | 9 +++++++ .../semmle/go/dataflow/Nodes/ResultNode.ql | 9 +++++++ .../semmle/go/dataflow/Nodes/ResultNode.qlref | 2 ++ .../semmle/go/dataflow/Nodes/main.go | 2 +- .../go/dataflow/Nodes/resultParameters.go | 27 +++++++++++++++++++ 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.expected create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.ql create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.qlref create mode 100644 go/ql/test/library-tests/semmle/go/dataflow/Nodes/resultParameters.go diff --git a/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.expected b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.expected new file mode 100644 index 00000000000..ae728dd5939 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.expected @@ -0,0 +1,9 @@ +| main.go:21:9:21:10 | 23 | Result node with index 0 | +| main.go:21:13:21:14 | 42 | Result node with index 1 | +| resultParameters.go:5:10:5:10 | 0 | Result node with index 0 | +| resultParameters.go:9:10:9:10 | 1 | Result node with index 0 | +| resultParameters.go:11:10:11:10 | 2 | Result node with index 0 | +| resultParameters.go:13:9:13:9 | 3 | Result node with index 0 | +| resultParameters.go:16:26:16:26 | implicit read of r | Result node with index 0 | +| resultParameters.go:21:38:21:38 | implicit read of r | Result node with index 0 | +| resultParameters.go:24:10:24:10 | 1 | Result node with index 0 | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.ql b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.ql new file mode 100644 index 00000000000..f2afd3ea430 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.ql @@ -0,0 +1,9 @@ +/** + * @kind problem + * @id result-node + */ + +import go + +from DataFlow::ResultNode r +select r, "Result node with index " + r.getIndex() diff --git a/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.qlref b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.qlref new file mode 100644 index 00000000000..effcf9ce1d9 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/ResultNode.qlref @@ -0,0 +1,2 @@ +query: ResultNode.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/library-tests/semmle/go/dataflow/Nodes/main.go b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/main.go index 1fb3466820c..dcfb9fb8c04 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/Nodes/main.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/main.go @@ -18,5 +18,5 @@ func f() { } func test() (int, int) { - return 23, 42 + return 23, 42 // $ Alert[result-node] } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/Nodes/resultParameters.go b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/resultParameters.go new file mode 100644 index 00000000000..af48b1be540 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/dataflow/Nodes/resultParameters.go @@ -0,0 +1,27 @@ +package main + +func multipleReturns(selector int) int { + if selector == 0 { + return 0 // $ Alert[result-node] + } + switch selector { + case 1: + return 1 // $ Alert[result-node] + case 2: + return 2 // $ Alert[result-node] + } + return 3 // $ Alert[result-node] +} + +func resultParameter1() (r int) { // $ Alert[result-node] // implicit reads of result parameters are located at the result parameter declaration + r = 0 + return +} + +func resultParameter2(selector int) (r int) { // $ Alert[result-node] // implicit reads of result parameters are located at the result parameter declaration + r = 0 + if selector == 1 { + return 1 // $ SPURIOUS: Alert[result-node] + } + return +}