Skip to content

Commit 12fdb1e

Browse files
committed
feat(go): Add Partial Path queries
1 parent 5f0febb commit 12fdb1e

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* @name Partial Path Query from Sink
3+
* @kind path-problem
4+
* @problem.severity warning
5+
* @security-severity 1.0
6+
* @sub-severity low
7+
* @precision low
8+
* @id go/debugging/partial-path-from-sink
9+
* @tags debugging
10+
*/
11+
12+
import go
13+
import ghsl
14+
import semmle.go.dataflow.DataFlow
15+
import semmle.go.dataflow.TaintTracking
16+
17+
// Partial Graph
18+
module PartialFlowConfig implements DataFlow::ConfigSig {
19+
predicate isSource(DataFlow::Node source) { any() }
20+
21+
predicate isSink(DataFlow::Node sink) { sink instanceof AllSinks }
22+
}
23+
24+
int explorationLimit() { result = 10 }
25+
26+
private module PartialFlows = DataFlow::Global<PartialFlowConfig>;
27+
28+
private module PartialFlowsGraph = PartialFlows::FlowExplorationRev<explorationLimit/0>;
29+
30+
private import PartialFlowsGraph::PartialPathGraph
31+
32+
from PartialFlowsGraph::PartialPathNode source, PartialFlowsGraph::PartialPathNode sink
33+
where
34+
/// Only show sinks from a certain file
35+
// findByLocation(sink.getNode(), "main.go", _) and
36+
/// Only show sources that match our criteria
37+
// checkSource(source.getNode()) and
38+
/// Partical Path
39+
PartialFlowsGraph::partialFlow(source, sink, _)
40+
select sink.getNode(), source, sink, "Partial Graph $@.", source.getNode(), "user-provided value"
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @name Partial Path Query from Source
3+
* @kind path-problem
4+
* @problem.severity warning
5+
* @security-severity 1.0
6+
* @sub-severity low
7+
* @precision low
8+
* @id py/debugging/partial-path-from-source
9+
* @tags debugging
10+
*/
11+
12+
import go
13+
import ghsl
14+
import semmle.go.dataflow.DataFlow
15+
import semmle.go.dataflow.TaintTracking
16+
17+
// Partial Graph
18+
module PartialFlowConfig implements DataFlow::ConfigSig {
19+
predicate isSource(DataFlow::Node source) {
20+
source instanceof AllSources
21+
}
22+
23+
predicate isSink(DataFlow::Node sink) { none() }
24+
}
25+
26+
int explorationLimit() { result = 10 }
27+
28+
module PartialFlows = DataFlow::Global<PartialFlowConfig>;
29+
30+
module PartialFlowsGraph = PartialFlows::FlowExplorationFwd<explorationLimit/0>;
31+
32+
import PartialFlowsGraph::PartialPathGraph
33+
34+
from PartialFlowsGraph::PartialPathNode source, PartialFlowsGraph::PartialPathNode sink
35+
where
36+
/// Filter by location
37+
// filterByLocation(source.getNode(), "main.go", _)
38+
PartialFlowsGraph::partialFlow(source, sink, _)
39+
select sink.getNode(), source, sink, "Partial Graph $@.", source.getNode(), "user-provided value"

0 commit comments

Comments
 (0)