diff --git a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointFeatures.qll b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointFeatures.qll index fad69e848f4..c40cd134d56 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointFeatures.qll +++ b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointFeatures.qll @@ -232,10 +232,10 @@ private newtype TEndpointFeature = TCalleeAccessPath() or TCalleeAccessPathWithStructuralInfo() or TEnclosingFunctionBody() or - TCalleeAccessPathSimpleFromArgumentTraversal() or - TParameterAccessPathSimpleFromArgumentTraversal() or - TPropertyAccessPathSimpleFromArgumentTraversal() or - TArgumentIndexFromArgumentTraversal() + TCallee_AccessPath() or + TInput_ArgumentIndexAndAccessPathFromCallee() or + TInput_AccessPathFromCallee() or + TInput_ArgumentIndex() /** * An implementation of an endpoint feature: produces feature names and values for used in ML. @@ -534,9 +534,8 @@ string getPropertyNameOrUnknown(DataFlow::PropRef ref) { * * This feature is intended as a superior version of the many `Callee*` features. */ -class CalleeAccessPathSimpleFromArgumentTraversal extends EndpointFeature, - TCalleeAccessPathSimpleFromArgumentTraversal { - override string getName() { result = "calleeAccessPathSimpleFromArgumentTraversal" } +class Callee_AccessPath extends EndpointFeature, TCallee_AccessPath { + override string getName() { result = "Callee_AccessPath" } override string getValue(DataFlow::Node endpoint) { exists(DataFlow::InvokeNode invk | @@ -562,9 +561,9 @@ class CalleeAccessPathSimpleFromArgumentTraversal extends EndpointFeature, * * This feature is intended as a superior version of the `ArgumentIndexFeature`. */ -class ParameterAccessPathSimpleFromArgumentTraversal extends EndpointFeature, - TParameterAccessPathSimpleFromArgumentTraversal { - override string getName() { result = "ParameterAccessPathSimpleFromArgumentTraversal" } +class Input_ArgumentIndexAndAccessPathFromCallee extends EndpointFeature, + TInput_ArgumentIndexAndAccessPathFromCallee { + override string getName() { result = "Input_ArgumentIndexAndAccessPathFromCallee" } override string getValue(DataFlow::Node endpoint) { exists(DataFlow::InvokeNode invk | @@ -580,15 +579,14 @@ class ParameterAccessPathSimpleFromArgumentTraversal extends EndpointFeature, } /** - * The feature for how a callee can refer to a the endpoint that is "contained" in a some argument to a call + * The feature for how a callee can refer to a the endpoint that is "contained" in some argument to a call * * "Containment" is syntactic, and currently means that the endpoint is an argument to the call, or that the endpoint is a (nested) property value of an argument. * * This feature is intended as a superior version of the `ArgumentIndexFeature`. */ -class PropertyAccessPathSimpleFromArgumentTraversal extends EndpointFeature, - TPropertyAccessPathSimpleFromArgumentTraversal { - override string getName() { result = "PropertyAccessPathSimpleFromArgumentTraversal" } +class Input_AccessPathFromCallee extends EndpointFeature, TInput_AccessPathFromCallee { + override string getName() { result = "Input_AccessPathFromCallee" } private string getValueMaybe(DataFlow::Node endpoint) { exists(DataFlow::InvokeNode invk | @@ -613,9 +611,8 @@ class PropertyAccessPathSimpleFromArgumentTraversal extends EndpointFeature, * * This feature is intended as a superior version of the `ArgumentIndexFeature`. */ -class ArgumentIndexFromArgumentTraversal extends EndpointFeature, - TArgumentIndexFromArgumentTraversal { - override string getName() { result = "ArgumentIndexFromArgumentTraversal" } +class Input_ArgumentIndex extends EndpointFeature, TInput_ArgumentIndex { + override string getName() { result = "Input_ArgumentIndex" } override string getValue(DataFlow::Node endpoint) { exists(DataFlow::InvokeNode invk, DataFlow::Node arg, int i | arg = invk.getArgument(i) | diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/debug/CompareFeatures.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/debug/CompareFeatures.ql index 97a2b2c3f47..f63dc1bf9f3 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/debug/CompareFeatures.ql +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/debug/CompareFeatures.ql @@ -13,7 +13,7 @@ from DataFlow::Node endpoint, EndpointFeature feature1, EndpointFeature feature2, string featureValue1, string featureValue2 where - feature1 instanceof ArgumentIndexFromArgumentTraversal and + feature1 instanceof Input_ArgumentIndex and feature2 instanceof ArgumentIndex and featureValue1 = getValueOrNone(feature1, endpoint) and featureValue2 = getValueOrNone(feature2, endpoint) and diff --git a/javascript/ql/experimental/adaptivethreatmodeling/test/generic_feature_testing/FeatureValue.expected b/javascript/ql/experimental/adaptivethreatmodeling/test/generic_feature_testing/FeatureValue.expected index 60db997dd49..236e946a329 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/test/generic_feature_testing/FeatureValue.expected +++ b/javascript/ql/experimental/adaptivethreatmodeling/test/generic_feature_testing/FeatureValue.expected @@ -1,93 +1,93 @@ -| test.html:2:61:2:68 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.html:2:61:2:68 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.html:2:61:2:68 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.html:2:61:2:68 | endpoint | Callee_AccessPath | $event.target.files.item | +| test.html:2:61:2:68 | endpoint | Input_AccessPathFromCallee | | +| test.html:2:61:2:68 | endpoint | Input_ArgumentIndex | 0 | +| test.html:2:61:2:68 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.html:2:61:2:68 | endpoint | argumentIndex | 0 | | test.html:2:61:2:68 | endpoint | calleeAccessPath | | -| test.html:2:61:2:68 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | $event.target.files.item | | test.html:2:61:2:68 | endpoint | calleeAccessPathWithStructuralInfo | | | test.html:2:61:2:68 | endpoint | calleeName | item | -| test.js:2:7:2:14 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:2:7:2:14 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:2:7:2:14 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:2:7:2:14 | endpoint | Callee_AccessPath | f | +| test.js:2:7:2:14 | endpoint | Input_AccessPathFromCallee | | +| test.js:2:7:2:14 | endpoint | Input_ArgumentIndex | 0 | +| test.js:2:7:2:14 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:2:7:2:14 | endpoint | argumentIndex | 0 | | test.js:2:7:2:14 | endpoint | calleeAccessPath | | -| test.js:2:7:2:14 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | f | | test.js:2:7:2:14 | endpoint | calleeAccessPathWithStructuralInfo | | | test.js:2:7:2:14 | endpoint | calleeName | f | -| test.js:3:11:3:18 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:3:11:3:18 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0.p | -| test.js:3:11:3:18 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | 0.p | +| test.js:3:11:3:18 | endpoint | Callee_AccessPath | f | +| test.js:3:11:3:18 | endpoint | Input_AccessPathFromCallee | 0.p | +| test.js:3:11:3:18 | endpoint | Input_ArgumentIndex | 0 | +| test.js:3:11:3:18 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0.p | | test.js:3:11:3:18 | endpoint | calleeAccessPath | | -| test.js:3:11:3:18 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | f | | test.js:3:11:3:18 | endpoint | calleeAccessPathWithStructuralInfo | | -| test.js:4:15:4:22 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:4:15:4:22 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0.p.q | -| test.js:4:15:4:22 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | 0.p.q | +| test.js:4:15:4:22 | endpoint | Callee_AccessPath | f | +| test.js:4:15:4:22 | endpoint | Input_AccessPathFromCallee | 0.p.q | +| test.js:4:15:4:22 | endpoint | Input_ArgumentIndex | 0 | +| test.js:4:15:4:22 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0.p.q | | test.js:4:15:4:22 | endpoint | calleeAccessPath | | -| test.js:4:15:4:22 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | f | | test.js:4:15:4:22 | endpoint | calleeAccessPathWithStructuralInfo | | -| test.js:5:9:5:16 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:5:9:5:16 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:5:9:5:16 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:5:9:5:16 | endpoint | Callee_AccessPath | o.m | +| test.js:5:9:5:16 | endpoint | Input_AccessPathFromCallee | | +| test.js:5:9:5:16 | endpoint | Input_ArgumentIndex | 0 | +| test.js:5:9:5:16 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:5:9:5:16 | endpoint | argumentIndex | 0 | | test.js:5:9:5:16 | endpoint | calleeAccessPath | | -| test.js:5:9:5:16 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | o.m | | test.js:5:9:5:16 | endpoint | calleeAccessPathWithStructuralInfo | | | test.js:5:9:5:16 | endpoint | calleeName | m | | test.js:5:9:5:16 | endpoint | receiverName | o | -| test.js:6:13:6:20 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:6:13:6:20 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0.p | -| test.js:6:13:6:20 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | 0.p | +| test.js:6:13:6:20 | endpoint | Callee_AccessPath | o.m | +| test.js:6:13:6:20 | endpoint | Input_AccessPathFromCallee | 0.p | +| test.js:6:13:6:20 | endpoint | Input_ArgumentIndex | 0 | +| test.js:6:13:6:20 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0.p | | test.js:6:13:6:20 | endpoint | calleeAccessPath | | -| test.js:6:13:6:20 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | o.m | | test.js:6:13:6:20 | endpoint | calleeAccessPathWithStructuralInfo | | -| test.js:7:17:7:24 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:7:17:7:24 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0.p.q | -| test.js:7:17:7:24 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | 0.p.q | +| test.js:7:17:7:24 | endpoint | Callee_AccessPath | o.m | +| test.js:7:17:7:24 | endpoint | Input_AccessPathFromCallee | 0.p.q | +| test.js:7:17:7:24 | endpoint | Input_ArgumentIndex | 0 | +| test.js:7:17:7:24 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0.p.q | | test.js:7:17:7:24 | endpoint | calleeAccessPath | | -| test.js:7:17:7:24 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | o.m | | test.js:7:17:7:24 | endpoint | calleeAccessPathWithStructuralInfo | | -| test.js:8:11:8:18 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:8:11:8:18 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | ? | -| test.js:8:11:8:18 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:8:11:8:18 | endpoint | Callee_AccessPath | F | +| test.js:8:11:8:18 | endpoint | Input_AccessPathFromCallee | | +| test.js:8:11:8:18 | endpoint | Input_ArgumentIndex | 0 | +| test.js:8:11:8:18 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | ? | | test.js:8:11:8:18 | endpoint | calleeAccessPath | | -| test.js:8:11:8:18 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | F | | test.js:8:11:8:18 | endpoint | calleeAccessPathWithStructuralInfo | | -| test.js:9:17:9:24 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:9:17:9:24 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:9:17:9:24 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:9:17:9:24 | endpoint | Callee_AccessPath | o.m().m().m | +| test.js:9:17:9:24 | endpoint | Input_AccessPathFromCallee | | +| test.js:9:17:9:24 | endpoint | Input_ArgumentIndex | 0 | +| test.js:9:17:9:24 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:9:17:9:24 | endpoint | argumentIndex | 0 | | test.js:9:17:9:24 | endpoint | calleeAccessPath | | -| test.js:9:17:9:24 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | o.m().m().m | | test.js:9:17:9:24 | endpoint | calleeAccessPathWithStructuralInfo | | | test.js:9:17:9:24 | endpoint | calleeName | m | -| test.js:10:9:10:16 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:10:9:10:16 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:10:9:10:16 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:10:9:10:16 | endpoint | Callee_AccessPath | f() | +| test.js:10:9:10:16 | endpoint | Input_AccessPathFromCallee | | +| test.js:10:9:10:16 | endpoint | Input_ArgumentIndex | 0 | +| test.js:10:9:10:16 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:10:9:10:16 | endpoint | argumentIndex | 0 | | test.js:10:9:10:16 | endpoint | calleeAccessPath | | -| test.js:10:9:10:16 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | f() | | test.js:10:9:10:16 | endpoint | calleeAccessPathWithStructuralInfo | | -| test.js:11:12:11:19 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:11:12:11:19 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:11:12:11:19 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:11:12:11:19 | endpoint | Callee_AccessPath | o.?.m | +| test.js:11:12:11:19 | endpoint | Input_AccessPathFromCallee | | +| test.js:11:12:11:19 | endpoint | Input_ArgumentIndex | 0 | +| test.js:11:12:11:19 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:11:12:11:19 | endpoint | argumentIndex | 0 | | test.js:11:12:11:19 | endpoint | calleeAccessPath | | -| test.js:11:12:11:19 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | o.?.m | | test.js:11:12:11:19 | endpoint | calleeAccessPathWithStructuralInfo | | | test.js:11:12:11:19 | endpoint | calleeName | m | -| test.js:12:16:12:23 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:12:16:12:23 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:12:16:12:23 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:12:16:12:23 | endpoint | Callee_AccessPath | o.m.?.p.m | +| test.js:12:16:12:23 | endpoint | Input_AccessPathFromCallee | | +| test.js:12:16:12:23 | endpoint | Input_ArgumentIndex | 0 | +| test.js:12:16:12:23 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:12:16:12:23 | endpoint | argumentIndex | 0 | | test.js:12:16:12:23 | endpoint | calleeAccessPath | | -| test.js:12:16:12:23 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | o.m.?.p.m | | test.js:12:16:12:23 | endpoint | calleeAccessPathWithStructuralInfo | | | test.js:12:16:12:23 | endpoint | calleeName | m | -| test.js:13:15:13:22 | endpoint | ArgumentIndexFromArgumentTraversal | 0 | -| test.js:13:15:13:22 | endpoint | ParameterAccessPathSimpleFromArgumentTraversal | 0 | -| test.js:13:15:13:22 | endpoint | PropertyAccessPathSimpleFromArgumentTraversal | | +| test.js:13:15:13:22 | endpoint | Callee_AccessPath | (await p) | +| test.js:13:15:13:22 | endpoint | Input_AccessPathFromCallee | | +| test.js:13:15:13:22 | endpoint | Input_ArgumentIndex | 0 | +| test.js:13:15:13:22 | endpoint | Input_ArgumentIndexAndAccessPathFromCallee | 0 | | test.js:13:15:13:22 | endpoint | argumentIndex | 0 | | test.js:13:15:13:22 | endpoint | calleeAccessPath | | -| test.js:13:15:13:22 | endpoint | calleeAccessPathSimpleFromArgumentTraversal | (await p) | | test.js:13:15:13:22 | endpoint | calleeAccessPathWithStructuralInfo | |