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

Skip to content

Commit 45234b1

Browse files
committed
Java: Refactor CaptureSourceModel to enable re-use.
1 parent f008375 commit 45234b1

3 files changed

Lines changed: 37 additions & 34 deletions

File tree

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

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,8 @@
44
* @id java/utils/model-generator/sink-models
55
*/
66

7-
import java
8-
private import semmle.code.java.dataflow.TaintTracking
9-
private import semmle.code.java.dataflow.ExternalFlow
10-
private import semmle.code.java.dataflow.internal.DataFlowImplCommon
117
private import ModelGeneratorUtils
12-
13-
class FromSourceConfiguration extends TaintTracking::Configuration {
14-
FromSourceConfiguration() { this = "FromSourceConfiguration" }
15-
16-
override predicate isSource(DataFlow::Node source) { sourceNode(source, _) }
17-
18-
override predicate isSink(DataFlow::Node sink) {
19-
exists(TargetApi c |
20-
sink instanceof ReturnNodeExt and
21-
sink.getEnclosingCallable() = c
22-
)
23-
}
24-
25-
override DataFlow::FlowFeature getAFeature() {
26-
result instanceof DataFlow::FeatureHasSinkCallContext
27-
}
28-
29-
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
30-
isRelevantTaintStep(node1, node2)
31-
}
32-
}
33-
34-
string captureSource(TargetApi api) {
35-
exists(DataFlow::Node source, DataFlow::Node sink, FromSourceConfiguration config, string kind |
36-
config.hasFlow(source, sink) and
37-
sourceNode(source, kind) and
38-
api = sink.getEnclosingCallable() and
39-
result = asSourceModel(api, returnNodeAsOutput(sink), kind)
40-
)
41-
}
8+
private import CaptureSourceModels
429

4310
from TargetApi api, string sink
4411
where sink = captureSource(api)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
private import CaptureSourceModelsSpecific
2+
private import ModelGeneratorUtils
3+
4+
class FromSourceConfiguration extends TaintTracking::Configuration {
5+
FromSourceConfiguration() { this = "FromSourceConfiguration" }
6+
7+
override predicate isSource(DataFlow::Node source) { sourceNode(source, _) }
8+
9+
override predicate isSink(DataFlow::Node sink) {
10+
exists(TargetApi c |
11+
sink instanceof ReturnNodeExt and
12+
sink.getEnclosingCallable() = c
13+
)
14+
}
15+
16+
override DataFlow::FlowFeature getAFeature() {
17+
result instanceof DataFlow::FeatureHasSinkCallContext
18+
}
19+
20+
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
21+
isRelevantTaintStep(node1, node2)
22+
}
23+
}
24+
25+
string captureSource(TargetApi api) {
26+
exists(DataFlow::Node source, DataFlow::Node sink, FromSourceConfiguration config, string kind |
27+
config.hasFlow(source, sink) and
28+
sourceNode(source, kind) and
29+
api = sink.getEnclosingCallable() and
30+
result = asSourceModel(api, returnNodeAsOutput(sink), kind)
31+
)
32+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import java
2+
import semmle.code.java.dataflow.TaintTracking
3+
import semmle.code.java.dataflow.ExternalFlow
4+
import semmle.code.java.dataflow.internal.DataFlowImplCommon

0 commit comments

Comments
 (0)