Skip to content

Commit 29b07d5

Browse files
authored
Merge pull request #21721 from owen-mc/go/remove-global-function-jump-step-from-local-flow
Go: Remove global function step from local flow
2 parents 14bdb62 + bc28e17 commit 29b07d5

File tree

5 files changed

+6
-142
lines changed

5 files changed

+6
-142
lines changed

go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ private module Input implements InputSig<Location, Impl::GoDataFlow> {
1919

2020
predicate uniqueNodeLocationExclude(DataFlow::Node n) { missingLocationExclude(n) }
2121

22-
predicate localFlowIsLocalExclude(DataFlow::Node n1, DataFlow::Node n2) {
23-
n1 instanceof DataFlow::FunctionNode and simpleLocalFlowStep(n1, n2, _)
24-
}
25-
2622
predicate argHasPostUpdateExclude(DataFlow::ArgumentNode n) {
2723
not DataFlow::insnHasPostUpdateNode(n.asInstruction())
2824
}

go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,6 @@ predicate basicLocalFlowStep(Node nodeFrom, Node nodeTo) {
9595
nodeTo = instructionNode(succ) and
9696
nodeTo != nodeFrom
9797
)
98-
or
99-
// GlobalFunctionNode -> use
100-
nodeFrom =
101-
any(GlobalFunctionNode fn | fn.getFunction() = nodeTo.asExpr().(FunctionName).getTarget())
10298
}
10399

104100
pragma[noinline]

go/ql/lib/semmle/go/frameworks/stdlib/IoFs.qll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,13 @@ module IoFs {
2020
private class WalkDirStep extends TaintTracking::AdditionalTaintStep {
2121
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
2222
//signature: func WalkDir(fsys FS, root string, fn WalkDirFunc) error
23-
exists(DataFlow::CallNode call, DataFlow::FunctionNode f |
24-
call.getTarget().hasQualifiedName(packagePath(), "WalkDir") and
25-
f.getASuccessor*() = call.getArgument(2)
23+
exists(DataFlow::CallNode call, DataFlow::FunctionNode f, DataFlow::Node n |
24+
n = f.(DataFlow::FuncLitNode)
25+
or
26+
n.asExpr().(FunctionName).getTarget() = f.(DataFlow::GlobalFunctionNode).getFunction()
2627
|
28+
call.getTarget().hasQualifiedName(packagePath(), "WalkDir") and
29+
n.getASuccessor*() = call.getArgument(2) and
2730
pred = call.getArgument(0) and
2831
succ = f.getParameter([0, 1])
2932
)

go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,3 @@
1-
| file://:0:0:0:0 | function Encode | url.go:51:14:51:21 | selection of Encode |
2-
| file://:0:0:0:0 | function EscapedPath | url.go:28:14:28:26 | selection of EscapedPath |
3-
| file://:0:0:0:0 | function Get | url.go:52:14:52:18 | selection of Get |
4-
| file://:0:0:0:0 | function Hostname | url.go:29:14:29:23 | selection of Hostname |
5-
| file://:0:0:0:0 | function JoinPath | url.go:57:16:57:27 | selection of JoinPath |
6-
| file://:0:0:0:0 | function JoinPath | url.go:58:16:58:27 | selection of JoinPath |
7-
| file://:0:0:0:0 | function JoinPath | url.go:60:15:60:28 | selection of JoinPath |
8-
| file://:0:0:0:0 | function JoinPath | url.go:66:9:66:25 | selection of JoinPath |
9-
| file://:0:0:0:0 | function MarshalBinary | url.go:30:11:30:25 | selection of MarshalBinary |
10-
| file://:0:0:0:0 | function Parse | url.go:23:10:23:18 | selection of Parse |
11-
| file://:0:0:0:0 | function Parse | url.go:32:9:32:15 | selection of Parse |
12-
| file://:0:0:0:0 | function Parse | url.go:59:14:59:22 | selection of Parse |
13-
| file://:0:0:0:0 | function Parse | url.go:65:17:65:25 | selection of Parse |
14-
| file://:0:0:0:0 | function ParseQuery | url.go:50:10:50:23 | selection of ParseQuery |
15-
| file://:0:0:0:0 | function ParseRequestURI | url.go:27:9:27:27 | selection of ParseRequestURI |
16-
| file://:0:0:0:0 | function Password | url.go:43:11:43:21 | selection of Password |
17-
| file://:0:0:0:0 | function PathEscape | url.go:12:31:12:44 | selection of PathEscape |
18-
| file://:0:0:0:0 | function PathUnescape | url.go:12:14:12:29 | selection of PathUnescape |
19-
| file://:0:0:0:0 | function Port | url.go:33:14:33:19 | selection of Port |
20-
| file://:0:0:0:0 | function Println | url.go:28:2:28:12 | selection of Println |
21-
| file://:0:0:0:0 | function Println | url.go:29:2:29:12 | selection of Println |
22-
| file://:0:0:0:0 | function Println | url.go:31:2:31:12 | selection of Println |
23-
| file://:0:0:0:0 | function Println | url.go:33:2:33:12 | selection of Println |
24-
| file://:0:0:0:0 | function Println | url.go:34:2:34:12 | selection of Println |
25-
| file://:0:0:0:0 | function Println | url.go:35:2:35:12 | selection of Println |
26-
| file://:0:0:0:0 | function Println | url.go:44:2:44:12 | selection of Println |
27-
| file://:0:0:0:0 | function Println | url.go:45:2:45:12 | selection of Println |
28-
| file://:0:0:0:0 | function Println | url.go:51:2:51:12 | selection of Println |
29-
| file://:0:0:0:0 | function Println | url.go:52:2:52:12 | selection of Println |
30-
| file://:0:0:0:0 | function Query | url.go:34:14:34:20 | selection of Query |
31-
| file://:0:0:0:0 | function QueryEscape | url.go:14:32:14:46 | selection of QueryEscape |
32-
| file://:0:0:0:0 | function QueryUnescape | url.go:14:14:14:30 | selection of QueryUnescape |
33-
| file://:0:0:0:0 | function Replace | strings.go:9:8:9:22 | selection of Replace |
34-
| file://:0:0:0:0 | function ReplaceAll | strings.go:10:8:10:25 | selection of ReplaceAll |
35-
| file://:0:0:0:0 | function RequestURI | url.go:35:14:35:25 | selection of RequestURI |
36-
| file://:0:0:0:0 | function ResolveReference | url.go:36:6:36:23 | selection of ResolveReference |
37-
| file://:0:0:0:0 | function Sprint | strings.go:11:9:11:18 | selection of Sprint |
38-
| file://:0:0:0:0 | function Sprintf | strings.go:11:30:11:40 | selection of Sprintf |
39-
| file://:0:0:0:0 | function Sprintln | strings.go:11:54:11:65 | selection of Sprintln |
40-
| file://:0:0:0:0 | function User | url.go:41:8:41:15 | selection of User |
41-
| file://:0:0:0:0 | function UserPassword | url.go:42:7:42:22 | selection of UserPassword |
42-
| file://:0:0:0:0 | function Username | url.go:45:14:45:24 | selection of Username |
43-
| file://:0:0:0:0 | function append | main.go:39:8:39:13 | append |
44-
| file://:0:0:0:0 | function append | main.go:40:8:40:13 | append |
45-
| file://:0:0:0:0 | function copy | main.go:42:2:42:5 | copy |
46-
| file://:0:0:0:0 | function make | main.go:41:8:41:11 | make |
47-
| file://:0:0:0:0 | function max | main.go:65:7:65:9 | max |
48-
| file://:0:0:0:0 | function min | main.go:64:7:64:9 | min |
49-
| main.go:3:6:3:10 | function test1 | main.go:34:2:34:6 | test1 |
501
| main.go:3:12:3:12 | argument corresponding to x | main.go:3:12:3:12 | definition of x |
512
| main.go:3:12:3:12 | definition of x | main.go:5:5:5:5 | x |
523
| main.go:3:19:3:20 | argument corresponding to fn | main.go:3:19:3:20 | definition of fn |
@@ -66,8 +17,6 @@
6617
| main.go:10:12:10:12 | y | main.go:10:17:10:17 | y |
6718
| main.go:10:17:10:27 | ...>=... | main.go:10:7:10:27 | ...&&... |
6819
| main.go:11:14:11:14 | z | main.go:11:9:11:15 | type conversion |
69-
| main.go:14:6:14:10 | function test2 | main.go:34:8:34:12 | test2 |
70-
| main.go:14:6:14:10 | function test2 | main.go:34:19:34:23 | test2 |
7120
| main.go:15:9:15:9 | 0 | main.go:15:2:15:4 | definition of acc |
7221
| main.go:16:9:19:2 | capture variable acc | main.go:17:3:17:5 | acc |
7322
| main.go:17:3:17:7 | definition of acc | main.go:18:10:18:12 | acc |

go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/LocalFlowStep.expected

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,3 @@
1-
| main.go:3:6:3:11 | function source | main.go:23:31:23:36 | source |
2-
| main.go:3:6:3:11 | function source | main.go:31:31:31:36 | source |
3-
| main.go:3:6:3:11 | function source | main.go:40:30:40:35 | source |
4-
| main.go:3:6:3:11 | function source | main.go:46:32:46:37 | source |
5-
| main.go:3:6:3:11 | function source | main.go:54:17:54:22 | source |
6-
| main.go:3:6:3:11 | function source | main.go:62:18:62:23 | source |
7-
| main.go:3:6:3:11 | function source | main.go:72:17:72:22 | source |
8-
| main.go:3:6:3:11 | function source | main.go:80:18:80:23 | source |
9-
| main.go:3:6:3:11 | function source | main.go:91:16:91:21 | source |
10-
| main.go:3:6:3:11 | function source | main.go:98:17:98:22 | source |
11-
| main.go:3:6:3:11 | function source | main.go:107:22:107:27 | source |
12-
| main.go:3:6:3:11 | function source | main.go:114:23:114:28 | source |
13-
| main.go:3:6:3:11 | function source | main.go:123:23:123:28 | source |
14-
| main.go:3:6:3:11 | function source | main.go:130:24:130:29 | source |
15-
| main.go:3:6:3:11 | function source | main.go:139:29:139:34 | source |
16-
| main.go:3:6:3:11 | function source | main.go:146:30:146:35 | source |
17-
| main.go:7:6:7:9 | function sink | main.go:25:2:25:5 | sink |
18-
| main.go:7:6:7:9 | function sink | main.go:26:2:26:5 | sink |
19-
| main.go:7:6:7:9 | function sink | main.go:27:2:27:5 | sink |
20-
| main.go:7:6:7:9 | function sink | main.go:28:2:28:5 | sink |
21-
| main.go:7:6:7:9 | function sink | main.go:33:2:33:5 | sink |
22-
| main.go:7:6:7:9 | function sink | main.go:34:2:34:5 | sink |
23-
| main.go:7:6:7:9 | function sink | main.go:35:2:35:5 | sink |
24-
| main.go:7:6:7:9 | function sink | main.go:36:2:36:5 | sink |
25-
| main.go:7:6:7:9 | function sink | main.go:41:2:41:5 | sink |
26-
| main.go:7:6:7:9 | function sink | main.go:42:2:42:5 | sink |
27-
| main.go:7:6:7:9 | function sink | main.go:43:2:43:5 | sink |
28-
| main.go:7:6:7:9 | function sink | main.go:44:2:44:5 | sink |
29-
| main.go:7:6:7:9 | function sink | main.go:47:2:47:5 | sink |
30-
| main.go:7:6:7:9 | function sink | main.go:48:2:48:5 | sink |
31-
| main.go:7:6:7:9 | function sink | main.go:49:2:49:5 | sink |
32-
| main.go:7:6:7:9 | function sink | main.go:50:2:50:5 | sink |
33-
| main.go:7:6:7:9 | function sink | main.go:57:2:57:5 | sink |
34-
| main.go:7:6:7:9 | function sink | main.go:58:2:58:5 | sink |
35-
| main.go:7:6:7:9 | function sink | main.go:59:2:59:5 | sink |
36-
| main.go:7:6:7:9 | function sink | main.go:60:2:60:5 | sink |
37-
| main.go:7:6:7:9 | function sink | main.go:65:2:65:5 | sink |
38-
| main.go:7:6:7:9 | function sink | main.go:66:2:66:5 | sink |
39-
| main.go:7:6:7:9 | function sink | main.go:67:2:67:5 | sink |
40-
| main.go:7:6:7:9 | function sink | main.go:68:2:68:5 | sink |
41-
| main.go:7:6:7:9 | function sink | main.go:75:2:75:5 | sink |
42-
| main.go:7:6:7:9 | function sink | main.go:76:2:76:5 | sink |
43-
| main.go:7:6:7:9 | function sink | main.go:77:2:77:5 | sink |
44-
| main.go:7:6:7:9 | function sink | main.go:78:2:78:5 | sink |
45-
| main.go:7:6:7:9 | function sink | main.go:83:2:83:5 | sink |
46-
| main.go:7:6:7:9 | function sink | main.go:84:2:84:5 | sink |
47-
| main.go:7:6:7:9 | function sink | main.go:85:2:85:5 | sink |
48-
| main.go:7:6:7:9 | function sink | main.go:86:2:86:5 | sink |
49-
| main.go:7:6:7:9 | function sink | main.go:92:2:92:5 | sink |
50-
| main.go:7:6:7:9 | function sink | main.go:93:2:93:5 | sink |
51-
| main.go:7:6:7:9 | function sink | main.go:94:2:94:5 | sink |
52-
| main.go:7:6:7:9 | function sink | main.go:95:2:95:5 | sink |
53-
| main.go:7:6:7:9 | function sink | main.go:99:2:99:5 | sink |
54-
| main.go:7:6:7:9 | function sink | main.go:100:2:100:5 | sink |
55-
| main.go:7:6:7:9 | function sink | main.go:101:2:101:5 | sink |
56-
| main.go:7:6:7:9 | function sink | main.go:102:2:102:5 | sink |
57-
| main.go:7:6:7:9 | function sink | main.go:108:2:108:5 | sink |
58-
| main.go:7:6:7:9 | function sink | main.go:109:2:109:5 | sink |
59-
| main.go:7:6:7:9 | function sink | main.go:110:2:110:5 | sink |
60-
| main.go:7:6:7:9 | function sink | main.go:111:2:111:5 | sink |
61-
| main.go:7:6:7:9 | function sink | main.go:115:2:115:5 | sink |
62-
| main.go:7:6:7:9 | function sink | main.go:116:2:116:5 | sink |
63-
| main.go:7:6:7:9 | function sink | main.go:117:2:117:5 | sink |
64-
| main.go:7:6:7:9 | function sink | main.go:118:2:118:5 | sink |
65-
| main.go:7:6:7:9 | function sink | main.go:124:2:124:5 | sink |
66-
| main.go:7:6:7:9 | function sink | main.go:125:2:125:5 | sink |
67-
| main.go:7:6:7:9 | function sink | main.go:126:2:126:5 | sink |
68-
| main.go:7:6:7:9 | function sink | main.go:127:2:127:5 | sink |
69-
| main.go:7:6:7:9 | function sink | main.go:131:2:131:5 | sink |
70-
| main.go:7:6:7:9 | function sink | main.go:132:2:132:5 | sink |
71-
| main.go:7:6:7:9 | function sink | main.go:133:2:133:5 | sink |
72-
| main.go:7:6:7:9 | function sink | main.go:134:2:134:5 | sink |
73-
| main.go:7:6:7:9 | function sink | main.go:140:2:140:5 | sink |
74-
| main.go:7:6:7:9 | function sink | main.go:141:2:141:5 | sink |
75-
| main.go:7:6:7:9 | function sink | main.go:142:2:142:5 | sink |
76-
| main.go:7:6:7:9 | function sink | main.go:143:2:143:5 | sink |
77-
| main.go:7:6:7:9 | function sink | main.go:147:2:147:5 | sink |
78-
| main.go:7:6:7:9 | function sink | main.go:148:2:148:5 | sink |
79-
| main.go:7:6:7:9 | function sink | main.go:149:2:149:5 | sink |
80-
| main.go:7:6:7:9 | function sink | main.go:150:2:150:5 | sink |
811
| main.go:22:2:22:6 | definition of outer | main.go:25:7:25:11 | outer |
822
| main.go:22:11:24:2 | struct literal | main.go:22:2:22:6 | definition of outer |
833
| main.go:22:11:24:2 | struct literal [postupdate] | main.go:22:2:22:6 | definition of outer |

0 commit comments

Comments
 (0)