Skip to content

Commit 833b4f9

Browse files
committed
Java: Make source and sink callable adapters.
1 parent 0fabca9 commit 833b4f9

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,3 +641,33 @@ private class NeutralCallableAdapter extends NeutralCallable {
641641

642642
override predicate hasExactModel() { exact = true }
643643
}
644+
645+
/**
646+
* A callable where there exists a MaD sink model that applies to it.
647+
*/
648+
private class SinkModelCallableAdapter extends SinkModelCallable {
649+
private Provenance provenance;
650+
651+
SinkModelCallableAdapter() {
652+
SourceSinkInterpretationInput::sinkElement(this, _, _, provenance, _)
653+
}
654+
655+
override predicate hasProvenance(Provenance p) { provenance = p }
656+
}
657+
658+
final class SinkCallable = SinkModelCallable;
659+
660+
/**
661+
* A callable where there exists a MaD source model that applies to it.
662+
*/
663+
private class SourceModelCallableAdapter extends SourceModelCallable {
664+
private Provenance provenance;
665+
666+
SourceModelCallableAdapter() {
667+
SourceSinkInterpretationInput::sourceElement(this, _, _, provenance, _)
668+
}
669+
670+
override predicate hasProvenance(Provenance p) { provenance = p }
671+
}
672+
673+
final class SourceCallable = SourceModelCallable;
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
private import java
2+
private import semmle.code.java.dataflow.ExternalFlow
23
private import semmle.code.java.dataflow.internal.DataFlowPrivate
3-
private import semmle.code.java.dataflow.internal.FlowSummaryImpl
44
private import semmle.code.java.dataflow.internal.ModelExclusions
55
private import ModelEditor
66

77
/**
88
* A class of effectively public callables from source code.
99
*/
1010
class PublicEndpointFromSource extends Endpoint, ModelApi {
11-
override predicate isSource() { SourceSinkInterpretationInput::sourceElement(this, _, _, _, _) }
11+
override predicate isSource() { this instanceof SourceCallable }
1212

13-
override predicate isSink() { SourceSinkInterpretationInput::sinkElement(this, _, _, _, _) }
13+
override predicate isSink() { this instanceof SinkCallable }
1414
}

0 commit comments

Comments
 (0)