Merge pull request #12783 from smowton/smowton/feature/golang-hide-summary-nodes

Go: hide summary nodes from path explanations
This commit is contained in:
Chris Smowton
2023-04-11 10:47:25 +01:00
committed by GitHub
4 changed files with 53 additions and 1 deletions

View File

@@ -352,7 +352,7 @@ Node getArgument(CallNode c, int i) {
}
/** Holds if `n` should be hidden from path explanations. */
predicate nodeIsHidden(Node n) { none() }
predicate nodeIsHidden(Node n) { n instanceof SummaryNode or n instanceof SummarizedParameterNode }
class LambdaCallKind = Unit;

View File

@@ -0,0 +1,12 @@
edges
| test.go:14:8:14:15 | call to source | test.go:15:34:15:35 | fi |
| test.go:15:2:15:44 | ... := ...[0] | test.go:16:7:16:12 | header |
| test.go:15:34:15:35 | fi | test.go:15:2:15:44 | ... := ...[0] |
nodes
| test.go:14:8:14:15 | call to source | semmle.label | call to source |
| test.go:15:2:15:44 | ... := ...[0] | semmle.label | ... := ...[0] |
| test.go:15:34:15:35 | fi | semmle.label | fi |
| test.go:16:7:16:12 | header | semmle.label | header |
subpaths
#select
| test.go:14:8:14:15 | call to source | test.go:14:8:14:15 | call to source | test.go:16:7:16:12 | header | Path |

View File

@@ -0,0 +1,18 @@
package test
import (
"archive/tar"
"os"
)
func source() interface{} { return nil }
func sink(x interface{}) {}
func test() {
fi := source().(os.FileInfo)
header, _ := tar.FileInfoHeader(fi, "link")
sink(header)
}

View File

@@ -0,0 +1,22 @@
/**
* @kind path-problem
*/
import go
import DataFlow::PathGraph
class Config extends TaintTracking::Configuration {
Config() { this = "config" }
override predicate isSource(DataFlow::Node n) {
n = any(DataFlow::CallNode call | call.getTarget().getName() = "source").getResult()
}
override predicate isSink(DataFlow::Node n) {
n = any(DataFlow::CallNode call | call.getTarget().getName() = "sink").getAnArgument()
}
}
from DataFlow::PathNode source, DataFlow::PathNode sink, Config c
where c.hasFlowPath(source, sink)
select source, source, sink, "Path"