Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 38579ef

Browse files
author
Benjamin Muskalla
committed
Add proper metadata to queries
1 parent a80d50c commit 38579ef

3 files changed

Lines changed: 29 additions & 13 deletions

File tree

java/ql/src/utils/model-generator/CaptureSinkModels.ql

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
/**
2+
* @name Capture sink models.
3+
* @description Finds public methods that act as sinks as they flow into a a known sink.
4+
* @id java/utils/model-generator/sink-models
5+
*/
6+
17
import java
28
import Telemetry.ExternalAPI
39
import semmle.code.java.dataflow.DataFlow
410
import semmle.code.java.dataflow.TaintTracking
511
import semmle.code.java.dataflow.ExternalFlow
612
import ModelGeneratorUtils
713

8-
class Configuration extends TaintTracking::Configuration {
9-
Configuration() { this = "public methods calling sinks" }
14+
class PropagateToSinkConfiguration extends TaintTracking::Configuration {
15+
PropagateToSinkConfiguration() { this = "public methods calling sinks" }
1016

1117
override predicate isSource(DataFlow::Node source) {
1218
exists(MethodAccess ma |
@@ -22,7 +28,7 @@ class Configuration extends TaintTracking::Configuration {
2228
string asInputArgument(Expr source) { result = "Argument[" + source.(Argument).getPosition() + "]" }
2329

2430
string captureSink(Callable api) {
25-
exists(DataFlow::Node src, DataFlow::Node sink, Configuration config, string kind |
31+
exists(DataFlow::Node src, DataFlow::Node sink, PropagateToSinkConfiguration config, string kind |
2632
config.hasFlow(src, sink) and
2733
sinkNode(sink, kind) and
2834
api = src.asExpr().getEnclosingCallable() and

java/ql/src/utils/model-generator/CaptureSourceModels.ql

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1+
/**
2+
* @name Capture source models.
3+
* @description Finds APIs that act as sources as they expose already known sources.
4+
* @id java/utils/model-generator/sink-models
5+
*/
6+
17
import java
2-
import Telemetry.ExternalAPI
3-
import semmle.code.java.dataflow.DataFlow
4-
import semmle.code.java.dataflow.TaintTracking
5-
import semmle.code.java.dataflow.ExternalFlow
6-
import ModelGeneratorUtils
8+
private import Telemetry.ExternalAPI
9+
private import semmle.code.java.dataflow.DataFlow
10+
private import semmle.code.java.dataflow.TaintTracking
11+
private import semmle.code.java.dataflow.ExternalFlow
12+
private import ModelGeneratorUtils
713
private import semmle.code.java.dataflow.internal.FlowSummaryImplSpecific
814
private import semmle.code.java.dataflow.internal.FlowSummaryImpl
915

10-
class Configuration extends TaintTracking::Configuration {
11-
Configuration() { this = "Configuration" }
16+
class FromSourceConfiguration extends TaintTracking::Configuration {
17+
FromSourceConfiguration() { this = "FromSourceConfiguration" }
1218

1319
override predicate isSource(DataFlow::Node source) { sourceNode(source, _) }
1420

@@ -21,14 +27,17 @@ class Configuration extends TaintTracking::Configuration {
2127
}
2228
}
2329

24-
// TODO: internals
30+
// TODO: better way than rely on internals?
2531
cached
2632
predicate specificSourceNode(DataFlow::Node node, string output, string kind) {
2733
exists(InterpretNode n | Private::External::isSourceNode(n, output, kind) and n.asNode() = node)
2834
}
2935

3036
string captureSink(Callable api) {
31-
exists(DataFlow::Node src, DataFlow::Node sink, Configuration config, string kind, string output |
37+
exists(
38+
DataFlow::Node src, DataFlow::Node sink, FromSourceConfiguration config, string kind,
39+
string output
40+
|
3241
config.hasFlow(src, sink) and
3342
specificSourceNode(sink, output, kind) and
3443
api = src.asExpr().getEnclosingCallable() and

java/ql/src/utils/model-generator/CaptureSummaryModels.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ string captureFieldFlow(Callable api) {
4141
string asOutput(Callable api, ReturnNodeExt node) {
4242
if node.getKind() instanceof ValueReturnKind
4343
then result = "ReturnValue"
44-
else result = parameterAccess(api.getParameter(node.getKind().(ParamUpdateReturnKind).getPosition()))
44+
else
45+
result = parameterAccess(api.getParameter(node.getKind().(ParamUpdateReturnKind).getPosition()))
4546
}
4647

4748
class FieldAssignment extends AssignExpr {

0 commit comments

Comments
 (0)