mirror of
https://github.com/github/codeql.git
synced 2026-05-05 21:55:19 +02:00
Merge branch 'main' into redsun82/bzlmod
This commit is contained in:
@@ -48,6 +48,7 @@
|
||||
| dataClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | boolean | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | copy(...) | MethodCall |
|
||||
| dataClass.kt:0:0:0:0 | false | BooleanLiteral |
|
||||
@@ -59,6 +60,7 @@
|
||||
| dataClass.kt:0:0:0:0 | int | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | int | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | int | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | int | TypeAccess |
|
||||
| dataClass.kt:0:0:0:0 | new DataClass(...) | ClassInstanceExpr |
|
||||
| dataClass.kt:0:0:0:0 | other | VarAccess |
|
||||
| dataClass.kt:0:0:0:0 | other | VarAccess |
|
||||
@@ -112,7 +114,6 @@
|
||||
| dataClass.kt:1:22:1:31 | int | TypeAccess |
|
||||
| dataClass.kt:1:22:1:31 | int | TypeAccess |
|
||||
| dataClass.kt:1:22:1:31 | int | TypeAccess |
|
||||
| dataClass.kt:1:22:1:31 | int | TypeAccess |
|
||||
| dataClass.kt:1:22:1:31 | this | ThisAccess |
|
||||
| dataClass.kt:1:22:1:31 | this.x | VarAccess |
|
||||
| dataClass.kt:1:22:1:31 | x | VarAccess |
|
||||
@@ -124,7 +125,6 @@
|
||||
| dataClass.kt:1:34:1:46 | String | TypeAccess |
|
||||
| dataClass.kt:1:34:1:46 | String | TypeAccess |
|
||||
| dataClass.kt:1:34:1:46 | String | TypeAccess |
|
||||
| dataClass.kt:1:34:1:46 | String | TypeAccess |
|
||||
| dataClass.kt:1:34:1:46 | Unit | TypeAccess |
|
||||
| dataClass.kt:1:34:1:46 | this | ThisAccess |
|
||||
| dataClass.kt:1:34:1:46 | this | ThisAccess |
|
||||
@@ -132,79 +132,79 @@
|
||||
| dataClass.kt:1:34:1:46 | this.y | VarAccess |
|
||||
| dataClass.kt:1:34:1:46 | y | VarAccess |
|
||||
| dataClass.kt:1:34:1:46 | y | VarAccess |
|
||||
| delegates.kt:1:9:1:12 | this | ThisAccess |
|
||||
| delegates.kt:1:9:1:12 | this | ThisAccess |
|
||||
| delegates.kt:1:9:1:12 | this | ThisAccess |
|
||||
| delegates.kt:4:18:6:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:4:18:6:5 | ...=... | KtInitializerAssignExpr |
|
||||
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | KProperty1<MyClass,Integer> | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | Lazy<Integer> | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | LazyKt | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | MyClass | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | a0 | VarAccess |
|
||||
| delegates.kt:4:18:6:5 | a0 | VarAccess |
|
||||
| delegates.kt:4:18:6:5 | get(...) | MethodCall |
|
||||
| delegates.kt:4:18:6:5 | getLazyProp(...) | MethodCall |
|
||||
| delegates.kt:4:18:6:5 | getValue(...) | MethodCall |
|
||||
| delegates.kt:4:18:6:5 | int | TypeAccess |
|
||||
| delegates.kt:4:18:6:5 | lazyProp$delegate | VarAccess |
|
||||
| delegates.kt:4:18:6:5 | this | ThisAccess |
|
||||
| delegates.kt:4:18:6:5 | this | ThisAccess |
|
||||
| delegates.kt:4:18:6:5 | this.lazyProp$delegate | VarAccess |
|
||||
| delegates.kt:4:21:6:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:4:21:6:5 | ...=... | KtInitializerAssignExpr |
|
||||
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | KProperty1<MyClass,Integer> | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | Lazy<Integer> | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | LazyKt | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | LazyKt | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | MyClass | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | a0 | VarAccess |
|
||||
| delegates.kt:4:21:6:5 | a0 | VarAccess |
|
||||
| delegates.kt:4:21:6:5 | get(...) | MethodCall |
|
||||
| delegates.kt:4:21:6:5 | getLazyProp(...) | MethodCall |
|
||||
| delegates.kt:4:21:6:5 | getValue(...) | MethodCall |
|
||||
| delegates.kt:4:21:6:5 | int | TypeAccess |
|
||||
| delegates.kt:4:21:6:5 | lazy(...) | MethodCall |
|
||||
| delegates.kt:4:21:6:5 | lazyProp$delegate | VarAccess |
|
||||
| delegates.kt:4:21:6:5 | this | ThisAccess |
|
||||
| delegates.kt:4:21:6:5 | this | ThisAccess |
|
||||
| delegates.kt:4:21:6:5 | this | ThisAccess |
|
||||
| delegates.kt:4:21:6:5 | this.lazyProp$delegate | VarAccess |
|
||||
| delegates.kt:4:26:6:5 | ...->... | LambdaExpr |
|
||||
| delegates.kt:4:26:6:5 | Function0<Integer> | TypeAccess |
|
||||
| delegates.kt:4:26:6:5 | Integer | TypeAccess |
|
||||
| delegates.kt:4:26:6:5 | int | TypeAccess |
|
||||
| delegates.kt:5:9:5:9 | 5 | IntegerLiteral |
|
||||
| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:8:32:11:5 | ...=... | KtInitializerAssignExpr |
|
||||
| delegates.kt:8:32:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | MyClass | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | MyClass | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | Object | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | ReadWriteProperty<Object,String> | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | Unit | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a1 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | a1 | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | get(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | get(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | getValue(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | observableProp$delegate | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | setValue(...) | MethodCall |
|
||||
| delegates.kt:8:32:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:32:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:32:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:32:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess |
|
||||
| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess |
|
||||
| delegates.kt:8:5:11:5 | Unit | TypeAccess |
|
||||
| delegates.kt:8:35:8:43 | INSTANCE | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:8:35:11:5 | ...=... | KtInitializerAssignExpr |
|
||||
| delegates.kt:8:35:11:5 | <set-?> | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | MyClass | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | MyClass | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | Object | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | ReadWriteProperty<Object,String> | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a0 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a1 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | a1 | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | get(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | get(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | getObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | getObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | getValue(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | observable(...) | MethodCall |
|
||||
| delegates.kt:8:57:8:62 | "<none>" | StringLiteral |
|
||||
| delegates.kt:8:35:11:5 | observableProp$delegate | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | setObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | setObservableProp(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | setValue(...) | MethodCall |
|
||||
| delegates.kt:8:35:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:35:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:35:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:35:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:35:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:35:11:5 | this | ThisAccess |
|
||||
| delegates.kt:8:35:11:5 | this.observableProp$delegate | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | this.observableProp$delegate | VarAccess |
|
||||
| delegates.kt:8:56:8:63 | "<none>" | StringLiteral |
|
||||
| delegates.kt:8:66:11:5 | ...->... | LambdaExpr |
|
||||
| delegates.kt:8:66:11:5 | Function3<KProperty<?>,String,String,Unit> | TypeAccess |
|
||||
| delegates.kt:8:66:11:5 | KProperty<?> | TypeAccess |
|
||||
@@ -223,23 +223,17 @@
|
||||
| delegates.kt:10:23:10:25 | old | VarAccess |
|
||||
| delegates.kt:10:26:10:31 | ", now " | StringLiteral |
|
||||
| delegates.kt:10:33:10:35 | new | VarAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumClass[] | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumEntries<EnumClass> | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumEntries<EnumWithFunctions> | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions[] | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | 0 | IntegerLiteral |
|
||||
| enumClass.kt:1:1:4:1 | Enum<EnumClass> | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | new Enum(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:1:1:4:1 | null | NullLiteral |
|
||||
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | EnumClass[] | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | EnumEntries<EnumClass> | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | String | TypeAccess |
|
||||
| enumClass.kt:1:21:1:32 | 0 | IntegerLiteral |
|
||||
| enumClass.kt:1:21:1:32 | Enum<EnumClass> | TypeAccess |
|
||||
| enumClass.kt:1:21:1:32 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:1:21:1:32 | new Enum<EnumClass>(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:1:21:1:32 | null | NullLiteral |
|
||||
| enumClass.kt:1:22:1:31 | ...=... | KtInitializerAssignExpr |
|
||||
| enumClass.kt:1:22:1:31 | int | TypeAccess |
|
||||
| enumClass.kt:1:22:1:31 | int | TypeAccess |
|
||||
@@ -251,29 +245,33 @@
|
||||
| enumClass.kt:2:5:2:13 | ...=... | KtInitializerAssignExpr |
|
||||
| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:2:5:2:13 | EnumClass.enum1 | VarAccess |
|
||||
| enumClass.kt:2:5:2:13 | new EnumClass(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:2:10:2:12 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:2:10:2:12 | new EnumClass(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:2:11:2:11 | 1 | IntegerLiteral |
|
||||
| enumClass.kt:3:5:3:12 | ...=... | KtInitializerAssignExpr |
|
||||
| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:3:5:3:12 | EnumClass.enum2 | VarAccess |
|
||||
| enumClass.kt:3:5:3:12 | new EnumClass(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:3:10:3:12 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:3:10:3:12 | new EnumClass(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:3:11:3:11 | 1 | IntegerLiteral |
|
||||
| enumClass.kt:6:1:16:1 | 0 | IntegerLiteral |
|
||||
| enumClass.kt:6:1:16:1 | Enum<EnumWithFunctions> | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | EnumEntries<EnumWithFunctions> | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | new Enum(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | EnumWithFunctions[] | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | String | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | new Enum<EnumWithFunctions>(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:6:1:16:1 | null | NullLiteral |
|
||||
| enumClass.kt:8:3:11:4 | ...=... | KtInitializerAssignExpr |
|
||||
| enumClass.kt:8:3:11:4 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
|
||||
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:8:3:11:4 | EnumWithFunctions.VAL | VarAccess |
|
||||
| enumClass.kt:8:3:11:4 | Unit | TypeAccess |
|
||||
| enumClass.kt:8:3:11:4 | VAL | TypeAccess |
|
||||
| enumClass.kt:8:3:11:4 | new EnumWithFunctions(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:8:3:11:4 | new VAL(...) | ClassInstanceExpr |
|
||||
|
||||
49
java/ql/test/library-tests/dataflow/flowfeature/A.java
Normal file
49
java/ql/test/library-tests/dataflow/flowfeature/A.java
Normal file
@@ -0,0 +1,49 @@
|
||||
public class A {
|
||||
static Object source(String s) { return null; }
|
||||
static void sink(Object o) { }
|
||||
|
||||
static Object id(Object x) { return x; }
|
||||
|
||||
static void test1(int dummy) {
|
||||
Object src = source("1");
|
||||
Object a = src;
|
||||
sink(a); // $ EqCc="1" SrcCc="1" SinkCc="1"
|
||||
}
|
||||
|
||||
static void test2() {
|
||||
Object src = source("2");
|
||||
Object a = src;
|
||||
sink(a); // $ EqCc="2" SrcCc="2" SinkCc="2"
|
||||
}
|
||||
|
||||
void test3() {
|
||||
Object src = source("3");
|
||||
Object a = id(src);
|
||||
sink(a); // $ EqCc="3" SrcCc="3" SinkCc="3"
|
||||
}
|
||||
|
||||
static void test4() {
|
||||
Object src = source("4");
|
||||
Object a = id(src);
|
||||
sink(a); // $ EqCc="4" SrcCc="4" SinkCc="4"
|
||||
}
|
||||
|
||||
static Object test5src() {
|
||||
return source("5");
|
||||
}
|
||||
|
||||
static void test5() {
|
||||
Object x = test5src();
|
||||
Object y = id(x);
|
||||
sink(y); // $ SinkCc="5"
|
||||
}
|
||||
|
||||
static void test6sink(Object x) {
|
||||
sink(x); // $ SrcCc="6"
|
||||
}
|
||||
|
||||
static void test6() {
|
||||
Object x = source("6");
|
||||
test6sink(x);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
testFailures
|
||||
failures
|
||||
60
java/ql/test/library-tests/dataflow/flowfeature/flow.ql
Normal file
60
java/ql/test/library-tests/dataflow/flowfeature/flow.ql
Normal file
@@ -0,0 +1,60 @@
|
||||
import java
|
||||
import semmle.code.java.dataflow.DataFlow
|
||||
import TestUtilities.InlineExpectationsTest
|
||||
|
||||
module Base {
|
||||
predicate isSource(DataFlow::Node n) { n.asExpr().(MethodCall).getMethod().hasName("source") }
|
||||
|
||||
predicate isSink(DataFlow::Node n) {
|
||||
exists(MethodCall ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument())
|
||||
}
|
||||
}
|
||||
|
||||
module ConfigSourceCc implements DataFlow::ConfigSig {
|
||||
import Base
|
||||
|
||||
DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext }
|
||||
}
|
||||
|
||||
module ConfigSinkCc implements DataFlow::ConfigSig {
|
||||
import Base
|
||||
|
||||
DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSinkCallContext }
|
||||
}
|
||||
|
||||
module ConfigEqualCc implements DataFlow::ConfigSig {
|
||||
import Base
|
||||
|
||||
DataFlow::FlowFeature getAFeature() {
|
||||
result instanceof DataFlow::FeatureEqualSourceSinkCallContext
|
||||
}
|
||||
}
|
||||
|
||||
module FlowSourceCc = DataFlow::Global<ConfigSourceCc>;
|
||||
|
||||
module FlowSinkCc = DataFlow::Global<ConfigSinkCc>;
|
||||
|
||||
module FlowEqualCc = DataFlow::Global<ConfigEqualCc>;
|
||||
|
||||
module HasFlowTest implements TestSig {
|
||||
string getARelevantTag() { result = ["SrcCc", "SinkCc", "EqCc"] }
|
||||
|
||||
predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
exists(DataFlow::Node src, DataFlow::Node sink |
|
||||
tag = "SrcCc" and
|
||||
FlowSourceCc::flow(src, sink)
|
||||
or
|
||||
tag = "SinkCc" and
|
||||
FlowSinkCc::flow(src, sink)
|
||||
or
|
||||
tag = "EqCc" and
|
||||
FlowEqualCc::flow(src, sink)
|
||||
|
|
||||
sink.getLocation() = location and
|
||||
element = sink.toString() and
|
||||
value = src.asExpr().(MethodCall).getAnArgument().toString()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
import MakeTest<HasFlowTest>
|
||||
@@ -83,7 +83,7 @@ module MakeImplCommon<InputSig Lang> {
|
||||
class LocalSourceNode extends Node {
|
||||
LocalSourceNode() {
|
||||
storeStep(_, this, _) or
|
||||
loadStep(_, this, _) or
|
||||
loadStep0(_, this, _) or
|
||||
jumpStepCached(_, this) or
|
||||
this instanceof ParamNode or
|
||||
this instanceof OutNodeExt
|
||||
@@ -115,12 +115,14 @@ module MakeImplCommon<InputSig Lang> {
|
||||
// TODO: support setters
|
||||
predicate storeStep(Node n1, Node n2, Content f) { storeSet(n1, f, n2, _, _) }
|
||||
|
||||
predicate loadStep(Node n1, LocalSourceNode n2, Content f) {
|
||||
private predicate loadStep0(Node n1, Node n2, Content f) {
|
||||
readSet(n1, f, n2)
|
||||
or
|
||||
argumentValueFlowsThrough(n1, TReadStepTypesSome(_, f, _), n2)
|
||||
}
|
||||
|
||||
predicate loadStep(Node n1, LocalSourceNode n2, Content f) { loadStep0(n1, n2, f) }
|
||||
|
||||
predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content f1, Content f2) { none() }
|
||||
|
||||
predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() }
|
||||
@@ -1551,9 +1553,7 @@ module MakeImplCommon<InputSig Lang> {
|
||||
class CallContextSomeCall extends CallContextCall, TSomeCall {
|
||||
override string toString() { result = "CcSomeCall" }
|
||||
|
||||
override predicate relevantFor(DataFlowCallable callable) {
|
||||
exists(ParamNode p | getNodeEnclosingCallable(p) = callable)
|
||||
}
|
||||
override predicate relevantFor(DataFlowCallable callable) { any() }
|
||||
|
||||
override predicate matchesCall(DataFlowCall call) { any() }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user