Skip to content

Commit d0e169e

Browse files
committed
Merge branch 'main' into redsun82/bzlmod
2 parents b174aa6 + 2fa8c2f commit d0e169e

File tree

5 files changed

+200
-91
lines changed

5 files changed

+200
-91
lines changed

java/ql/test-kotlin2/library-tests/methods/exprs.expected

Lines changed: 84 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
| dataClass.kt:0:0:0:0 | String | TypeAccess |
4949
| dataClass.kt:0:0:0:0 | String | TypeAccess |
5050
| dataClass.kt:0:0:0:0 | String | TypeAccess |
51+
| dataClass.kt:0:0:0:0 | String | TypeAccess |
5152
| dataClass.kt:0:0:0:0 | boolean | TypeAccess |
5253
| dataClass.kt:0:0:0:0 | copy(...) | MethodCall |
5354
| dataClass.kt:0:0:0:0 | false | BooleanLiteral |
@@ -59,6 +60,7 @@
5960
| dataClass.kt:0:0:0:0 | int | TypeAccess |
6061
| dataClass.kt:0:0:0:0 | int | TypeAccess |
6162
| dataClass.kt:0:0:0:0 | int | TypeAccess |
63+
| dataClass.kt:0:0:0:0 | int | TypeAccess |
6264
| dataClass.kt:0:0:0:0 | new DataClass(...) | ClassInstanceExpr |
6365
| dataClass.kt:0:0:0:0 | other | VarAccess |
6466
| dataClass.kt:0:0:0:0 | other | VarAccess |
@@ -112,7 +114,6 @@
112114
| dataClass.kt:1:22:1:31 | int | TypeAccess |
113115
| dataClass.kt:1:22:1:31 | int | TypeAccess |
114116
| dataClass.kt:1:22:1:31 | int | TypeAccess |
115-
| dataClass.kt:1:22:1:31 | int | TypeAccess |
116117
| dataClass.kt:1:22:1:31 | this | ThisAccess |
117118
| dataClass.kt:1:22:1:31 | this.x | VarAccess |
118119
| dataClass.kt:1:22:1:31 | x | VarAccess |
@@ -124,87 +125,86 @@
124125
| dataClass.kt:1:34:1:46 | String | TypeAccess |
125126
| dataClass.kt:1:34:1:46 | String | TypeAccess |
126127
| dataClass.kt:1:34:1:46 | String | TypeAccess |
127-
| dataClass.kt:1:34:1:46 | String | TypeAccess |
128128
| dataClass.kt:1:34:1:46 | Unit | TypeAccess |
129129
| dataClass.kt:1:34:1:46 | this | ThisAccess |
130130
| dataClass.kt:1:34:1:46 | this | ThisAccess |
131131
| dataClass.kt:1:34:1:46 | this.y | VarAccess |
132132
| dataClass.kt:1:34:1:46 | this.y | VarAccess |
133133
| dataClass.kt:1:34:1:46 | y | VarAccess |
134134
| dataClass.kt:1:34:1:46 | y | VarAccess |
135-
| delegates.kt:1:9:1:12 | this | ThisAccess |
136-
| delegates.kt:1:9:1:12 | this | ThisAccess |
137-
| delegates.kt:1:9:1:12 | this | ThisAccess |
138-
| delegates.kt:4:18:6:5 | ...::... | PropertyRefExpr |
139-
| delegates.kt:4:18:6:5 | ...=... | KtInitializerAssignExpr |
140-
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
141-
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
142-
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
143-
| delegates.kt:4:18:6:5 | KProperty1<MyClass,Integer> | TypeAccess |
144-
| delegates.kt:4:18:6:5 | Lazy<Integer> | TypeAccess |
145-
| delegates.kt:4:18:6:5 | LazyKt | TypeAccess |
146-
| delegates.kt:4:18:6:5 | MyClass | TypeAccess |
147-
| delegates.kt:4:18:6:5 | a0 | VarAccess |
148-
| delegates.kt:4:18:6:5 | a0 | VarAccess |
149-
| delegates.kt:4:18:6:5 | get(...) | MethodCall |
150-
| delegates.kt:4:18:6:5 | getLazyProp(...) | MethodCall |
151-
| delegates.kt:4:18:6:5 | getValue(...) | MethodCall |
152-
| delegates.kt:4:18:6:5 | int | TypeAccess |
153-
| delegates.kt:4:18:6:5 | lazyProp$delegate | VarAccess |
154-
| delegates.kt:4:18:6:5 | this | ThisAccess |
155-
| delegates.kt:4:18:6:5 | this | ThisAccess |
156-
| delegates.kt:4:18:6:5 | this.lazyProp$delegate | VarAccess |
135+
| delegates.kt:4:21:6:5 | ...::... | PropertyRefExpr |
136+
| delegates.kt:4:21:6:5 | ...=... | KtInitializerAssignExpr |
137+
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
157138
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
139+
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
140+
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
141+
| delegates.kt:4:21:6:5 | KProperty1<MyClass,Integer> | TypeAccess |
142+
| delegates.kt:4:21:6:5 | Lazy<Integer> | TypeAccess |
143+
| delegates.kt:4:21:6:5 | LazyKt | TypeAccess |
158144
| delegates.kt:4:21:6:5 | LazyKt | TypeAccess |
145+
| delegates.kt:4:21:6:5 | MyClass | TypeAccess |
146+
| delegates.kt:4:21:6:5 | a0 | VarAccess |
147+
| delegates.kt:4:21:6:5 | a0 | VarAccess |
148+
| delegates.kt:4:21:6:5 | get(...) | MethodCall |
149+
| delegates.kt:4:21:6:5 | getLazyProp(...) | MethodCall |
150+
| delegates.kt:4:21:6:5 | getValue(...) | MethodCall |
151+
| delegates.kt:4:21:6:5 | int | TypeAccess |
159152
| delegates.kt:4:21:6:5 | lazy(...) | MethodCall |
153+
| delegates.kt:4:21:6:5 | lazyProp$delegate | VarAccess |
154+
| delegates.kt:4:21:6:5 | this | ThisAccess |
155+
| delegates.kt:4:21:6:5 | this | ThisAccess |
156+
| delegates.kt:4:21:6:5 | this | ThisAccess |
157+
| delegates.kt:4:21:6:5 | this.lazyProp$delegate | VarAccess |
160158
| delegates.kt:4:26:6:5 | ...->... | LambdaExpr |
161159
| delegates.kt:4:26:6:5 | Function0<Integer> | TypeAccess |
162160
| delegates.kt:4:26:6:5 | Integer | TypeAccess |
163161
| delegates.kt:4:26:6:5 | int | TypeAccess |
164162
| delegates.kt:5:9:5:9 | 5 | IntegerLiteral |
165-
| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr |
166-
| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr |
167-
| delegates.kt:8:32:11:5 | ...=... | KtInitializerAssignExpr |
168-
| delegates.kt:8:32:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
169-
| delegates.kt:8:32:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
170-
| delegates.kt:8:32:11:5 | MyClass | TypeAccess |
171-
| delegates.kt:8:32:11:5 | MyClass | TypeAccess |
172-
| delegates.kt:8:32:11:5 | Object | TypeAccess |
173-
| delegates.kt:8:32:11:5 | ReadWriteProperty<Object,String> | TypeAccess |
174-
| delegates.kt:8:32:11:5 | String | TypeAccess |
175-
| delegates.kt:8:32:11:5 | String | TypeAccess |
176-
| delegates.kt:8:32:11:5 | String | TypeAccess |
177-
| delegates.kt:8:32:11:5 | String | TypeAccess |
178-
| delegates.kt:8:32:11:5 | String | TypeAccess |
179-
| delegates.kt:8:32:11:5 | Unit | TypeAccess |
180-
| delegates.kt:8:32:11:5 | a0 | VarAccess |
181-
| delegates.kt:8:32:11:5 | a0 | VarAccess |
182-
| delegates.kt:8:32:11:5 | a0 | VarAccess |
183-
| delegates.kt:8:32:11:5 | a0 | VarAccess |
184-
| delegates.kt:8:32:11:5 | a0 | VarAccess |
185-
| delegates.kt:8:32:11:5 | a0 | VarAccess |
186-
| delegates.kt:8:32:11:5 | a1 | VarAccess |
187-
| delegates.kt:8:32:11:5 | a1 | VarAccess |
188-
| delegates.kt:8:32:11:5 | get(...) | MethodCall |
189-
| delegates.kt:8:32:11:5 | get(...) | MethodCall |
190-
| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodCall |
191-
| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodCall |
192-
| delegates.kt:8:32:11:5 | getValue(...) | MethodCall |
193-
| delegates.kt:8:32:11:5 | observableProp$delegate | VarAccess |
194-
| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodCall |
195-
| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodCall |
196-
| delegates.kt:8:32:11:5 | setValue(...) | MethodCall |
197-
| delegates.kt:8:32:11:5 | this | ThisAccess |
198-
| delegates.kt:8:32:11:5 | this | ThisAccess |
199-
| delegates.kt:8:32:11:5 | this | ThisAccess |
200-
| delegates.kt:8:32:11:5 | this | ThisAccess |
201-
| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess |
202-
| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess |
163+
| delegates.kt:8:5:11:5 | Unit | TypeAccess |
203164
| delegates.kt:8:35:8:43 | INSTANCE | VarAccess |
165+
| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr |
166+
| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr |
167+
| delegates.kt:8:35:11:5 | ...=... | KtInitializerAssignExpr |
204168
| delegates.kt:8:35:11:5 | <set-?> | VarAccess |
169+
| delegates.kt:8:35:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
170+
| delegates.kt:8:35:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
171+
| delegates.kt:8:35:11:5 | MyClass | TypeAccess |
172+
| delegates.kt:8:35:11:5 | MyClass | TypeAccess |
173+
| delegates.kt:8:35:11:5 | Object | TypeAccess |
174+
| delegates.kt:8:35:11:5 | ReadWriteProperty<Object,String> | TypeAccess |
175+
| delegates.kt:8:35:11:5 | String | TypeAccess |
176+
| delegates.kt:8:35:11:5 | String | TypeAccess |
205177
| delegates.kt:8:35:11:5 | String | TypeAccess |
178+
| delegates.kt:8:35:11:5 | String | TypeAccess |
179+
| delegates.kt:8:35:11:5 | String | TypeAccess |
180+
| delegates.kt:8:35:11:5 | String | TypeAccess |
181+
| delegates.kt:8:35:11:5 | a0 | VarAccess |
182+
| delegates.kt:8:35:11:5 | a0 | VarAccess |
183+
| delegates.kt:8:35:11:5 | a0 | VarAccess |
184+
| delegates.kt:8:35:11:5 | a0 | VarAccess |
185+
| delegates.kt:8:35:11:5 | a0 | VarAccess |
186+
| delegates.kt:8:35:11:5 | a0 | VarAccess |
187+
| delegates.kt:8:35:11:5 | a1 | VarAccess |
188+
| delegates.kt:8:35:11:5 | a1 | VarAccess |
189+
| delegates.kt:8:35:11:5 | get(...) | MethodCall |
190+
| delegates.kt:8:35:11:5 | get(...) | MethodCall |
191+
| delegates.kt:8:35:11:5 | getObservableProp(...) | MethodCall |
192+
| delegates.kt:8:35:11:5 | getObservableProp(...) | MethodCall |
193+
| delegates.kt:8:35:11:5 | getValue(...) | MethodCall |
206194
| delegates.kt:8:35:11:5 | observable(...) | MethodCall |
207-
| delegates.kt:8:57:8:62 | "<none>" | StringLiteral |
195+
| delegates.kt:8:35:11:5 | observableProp$delegate | VarAccess |
196+
| delegates.kt:8:35:11:5 | setObservableProp(...) | MethodCall |
197+
| delegates.kt:8:35:11:5 | setObservableProp(...) | MethodCall |
198+
| delegates.kt:8:35:11:5 | setValue(...) | MethodCall |
199+
| delegates.kt:8:35:11:5 | this | ThisAccess |
200+
| delegates.kt:8:35:11:5 | this | ThisAccess |
201+
| delegates.kt:8:35:11:5 | this | ThisAccess |
202+
| delegates.kt:8:35:11:5 | this | ThisAccess |
203+
| delegates.kt:8:35:11:5 | this | ThisAccess |
204+
| delegates.kt:8:35:11:5 | this | ThisAccess |
205+
| delegates.kt:8:35:11:5 | this.observableProp$delegate | VarAccess |
206+
| delegates.kt:8:35:11:5 | this.observableProp$delegate | VarAccess |
207+
| delegates.kt:8:56:8:63 | "<none>" | StringLiteral |
208208
| delegates.kt:8:66:11:5 | ...->... | LambdaExpr |
209209
| delegates.kt:8:66:11:5 | Function3<KProperty<?>,String,String,Unit> | TypeAccess |
210210
| delegates.kt:8:66:11:5 | KProperty<?> | TypeAccess |
@@ -223,23 +223,17 @@
223223
| delegates.kt:10:23:10:25 | old | VarAccess |
224224
| delegates.kt:10:26:10:31 | ", now " | StringLiteral |
225225
| delegates.kt:10:33:10:35 | new | VarAccess |
226-
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
227-
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
228-
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
229-
| enumClass.kt:0:0:0:0 | EnumClass[] | TypeAccess |
230-
| enumClass.kt:0:0:0:0 | EnumEntries<EnumClass> | TypeAccess |
231-
| enumClass.kt:0:0:0:0 | EnumEntries<EnumWithFunctions> | TypeAccess |
232-
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
233-
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
234-
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
235-
| enumClass.kt:0:0:0:0 | EnumWithFunctions[] | TypeAccess |
236-
| enumClass.kt:0:0:0:0 | String | TypeAccess |
237-
| enumClass.kt:0:0:0:0 | String | TypeAccess |
238-
| enumClass.kt:1:1:4:1 | 0 | IntegerLiteral |
239-
| enumClass.kt:1:1:4:1 | Enum<EnumClass> | TypeAccess |
240226
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
241-
| enumClass.kt:1:1:4:1 | new Enum(...) | ClassInstanceExpr |
242-
| enumClass.kt:1:1:4:1 | null | NullLiteral |
227+
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
228+
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
229+
| enumClass.kt:1:1:4:1 | EnumClass[] | TypeAccess |
230+
| enumClass.kt:1:1:4:1 | EnumEntries<EnumClass> | TypeAccess |
231+
| enumClass.kt:1:1:4:1 | String | TypeAccess |
232+
| enumClass.kt:1:21:1:32 | 0 | IntegerLiteral |
233+
| enumClass.kt:1:21:1:32 | Enum<EnumClass> | TypeAccess |
234+
| enumClass.kt:1:21:1:32 | EnumClass | TypeAccess |
235+
| enumClass.kt:1:21:1:32 | new Enum<EnumClass>(...) | ClassInstanceExpr |
236+
| enumClass.kt:1:21:1:32 | null | NullLiteral |
243237
| enumClass.kt:1:22:1:31 | ...=... | KtInitializerAssignExpr |
244238
| enumClass.kt:1:22:1:31 | int | TypeAccess |
245239
| enumClass.kt:1:22:1:31 | int | TypeAccess |
@@ -251,29 +245,33 @@
251245
| enumClass.kt:2:5:2:13 | ...=... | KtInitializerAssignExpr |
252246
| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess |
253247
| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess |
254-
| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess |
255248
| enumClass.kt:2:5:2:13 | EnumClass.enum1 | VarAccess |
256-
| enumClass.kt:2:5:2:13 | new EnumClass(...) | ClassInstanceExpr |
249+
| enumClass.kt:2:10:2:12 | EnumClass | TypeAccess |
250+
| enumClass.kt:2:10:2:12 | new EnumClass(...) | ClassInstanceExpr |
257251
| enumClass.kt:2:11:2:11 | 1 | IntegerLiteral |
258252
| enumClass.kt:3:5:3:12 | ...=... | KtInitializerAssignExpr |
259253
| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess |
260254
| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess |
261-
| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess |
262255
| enumClass.kt:3:5:3:12 | EnumClass.enum2 | VarAccess |
263-
| enumClass.kt:3:5:3:12 | new EnumClass(...) | ClassInstanceExpr |
256+
| enumClass.kt:3:10:3:12 | EnumClass | TypeAccess |
257+
| enumClass.kt:3:10:3:12 | new EnumClass(...) | ClassInstanceExpr |
264258
| enumClass.kt:3:11:3:11 | 1 | IntegerLiteral |
265259
| enumClass.kt:6:1:16:1 | 0 | IntegerLiteral |
266260
| enumClass.kt:6:1:16:1 | Enum<EnumWithFunctions> | TypeAccess |
261+
| enumClass.kt:6:1:16:1 | EnumEntries<EnumWithFunctions> | TypeAccess |
262+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
263+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
264+
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
267265
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
268-
| enumClass.kt:6:1:16:1 | new Enum(...) | ClassInstanceExpr |
266+
| enumClass.kt:6:1:16:1 | EnumWithFunctions[] | TypeAccess |
267+
| enumClass.kt:6:1:16:1 | String | TypeAccess |
268+
| enumClass.kt:6:1:16:1 | new Enum<EnumWithFunctions>(...) | ClassInstanceExpr |
269269
| enumClass.kt:6:1:16:1 | null | NullLiteral |
270270
| enumClass.kt:8:3:11:4 | ...=... | KtInitializerAssignExpr |
271-
| enumClass.kt:8:3:11:4 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
272271
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
273272
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
274273
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
275274
| enumClass.kt:8:3:11:4 | EnumWithFunctions.VAL | VarAccess |
276-
| enumClass.kt:8:3:11:4 | Unit | TypeAccess |
277275
| enumClass.kt:8:3:11:4 | VAL | TypeAccess |
278276
| enumClass.kt:8:3:11:4 | new EnumWithFunctions(...) | ClassInstanceExpr |
279277
| enumClass.kt:8:3:11:4 | new VAL(...) | ClassInstanceExpr |
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
public class A {
2+
static Object source(String s) { return null; }
3+
static void sink(Object o) { }
4+
5+
static Object id(Object x) { return x; }
6+
7+
static void test1(int dummy) {
8+
Object src = source("1");
9+
Object a = src;
10+
sink(a); // $ EqCc="1" SrcCc="1" SinkCc="1"
11+
}
12+
13+
static void test2() {
14+
Object src = source("2");
15+
Object a = src;
16+
sink(a); // $ EqCc="2" SrcCc="2" SinkCc="2"
17+
}
18+
19+
void test3() {
20+
Object src = source("3");
21+
Object a = id(src);
22+
sink(a); // $ EqCc="3" SrcCc="3" SinkCc="3"
23+
}
24+
25+
static void test4() {
26+
Object src = source("4");
27+
Object a = id(src);
28+
sink(a); // $ EqCc="4" SrcCc="4" SinkCc="4"
29+
}
30+
31+
static Object test5src() {
32+
return source("5");
33+
}
34+
35+
static void test5() {
36+
Object x = test5src();
37+
Object y = id(x);
38+
sink(y); // $ SinkCc="5"
39+
}
40+
41+
static void test6sink(Object x) {
42+
sink(x); // $ SrcCc="6"
43+
}
44+
45+
static void test6() {
46+
Object x = source("6");
47+
test6sink(x);
48+
}
49+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
testFailures
2+
failures
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import java
2+
import semmle.code.java.dataflow.DataFlow
3+
import TestUtilities.InlineExpectationsTest
4+
5+
module Base {
6+
predicate isSource(DataFlow::Node n) { n.asExpr().(MethodCall).getMethod().hasName("source") }
7+
8+
predicate isSink(DataFlow::Node n) {
9+
exists(MethodCall ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument())
10+
}
11+
}
12+
13+
module ConfigSourceCc implements DataFlow::ConfigSig {
14+
import Base
15+
16+
DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext }
17+
}
18+
19+
module ConfigSinkCc implements DataFlow::ConfigSig {
20+
import Base
21+
22+
DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSinkCallContext }
23+
}
24+
25+
module ConfigEqualCc implements DataFlow::ConfigSig {
26+
import Base
27+
28+
DataFlow::FlowFeature getAFeature() {
29+
result instanceof DataFlow::FeatureEqualSourceSinkCallContext
30+
}
31+
}
32+
33+
module FlowSourceCc = DataFlow::Global<ConfigSourceCc>;
34+
35+
module FlowSinkCc = DataFlow::Global<ConfigSinkCc>;
36+
37+
module FlowEqualCc = DataFlow::Global<ConfigEqualCc>;
38+
39+
module HasFlowTest implements TestSig {
40+
string getARelevantTag() { result = ["SrcCc", "SinkCc", "EqCc"] }
41+
42+
predicate hasActualResult(Location location, string element, string tag, string value) {
43+
exists(DataFlow::Node src, DataFlow::Node sink |
44+
tag = "SrcCc" and
45+
FlowSourceCc::flow(src, sink)
46+
or
47+
tag = "SinkCc" and
48+
FlowSinkCc::flow(src, sink)
49+
or
50+
tag = "EqCc" and
51+
FlowEqualCc::flow(src, sink)
52+
|
53+
sink.getLocation() = location and
54+
element = sink.toString() and
55+
value = src.asExpr().(MethodCall).getAnArgument().toString()
56+
)
57+
}
58+
}
59+
60+
import MakeTest<HasFlowTest>

shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ module MakeImplCommon<InputSig Lang> {
8383
class LocalSourceNode extends Node {
8484
LocalSourceNode() {
8585
storeStep(_, this, _) or
86-
loadStep(_, this, _) or
86+
loadStep0(_, this, _) or
8787
jumpStepCached(_, this) or
8888
this instanceof ParamNode or
8989
this instanceof OutNodeExt
@@ -115,12 +115,14 @@ module MakeImplCommon<InputSig Lang> {
115115
// TODO: support setters
116116
predicate storeStep(Node n1, Node n2, Content f) { storeSet(n1, f, n2, _, _) }
117117

118-
predicate loadStep(Node n1, LocalSourceNode n2, Content f) {
118+
private predicate loadStep0(Node n1, Node n2, Content f) {
119119
readSet(n1, f, n2)
120120
or
121121
argumentValueFlowsThrough(n1, TReadStepTypesSome(_, f, _), n2)
122122
}
123123

124+
predicate loadStep(Node n1, LocalSourceNode n2, Content f) { loadStep0(n1, n2, f) }
125+
124126
predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content f1, Content f2) { none() }
125127

126128
predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() }
@@ -1551,9 +1553,7 @@ module MakeImplCommon<InputSig Lang> {
15511553
class CallContextSomeCall extends CallContextCall, TSomeCall {
15521554
override string toString() { result = "CcSomeCall" }
15531555

1554-
override predicate relevantFor(DataFlowCallable callable) {
1555-
exists(ParamNode p | getNodeEnclosingCallable(p) = callable)
1556-
}
1556+
override predicate relevantFor(DataFlowCallable callable) { any() }
15571557

15581558
override predicate matchesCall(DataFlowCall call) { any() }
15591559
}

0 commit comments

Comments
 (0)