Skip to content

Commit 3d53ddf

Browse files
committed
DataFlow: Add some shared classes for Neutrals, Source and Sink callables.
1 parent e1317dd commit 3d53ddf

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,20 @@ module Make<
270270
NeutralSummaryCallable() { this.getKind() = "summary" }
271271
}
272272

273+
/**
274+
* A callable that has a neutral source model.
275+
*/
276+
class NeutralSourceCallable extends NeutralCallableFinal {
277+
NeutralSourceCallable() { this.getKind() = "source" }
278+
}
279+
280+
/**
281+
* A callable that has a neutral sink model.
282+
*/
283+
class NeutralSinkCallable extends NeutralCallableFinal {
284+
NeutralSinkCallable() { this.getKind() = "sink" }
285+
}
286+
273287
/**
274288
* A callable that has a neutral model.
275289
*/
@@ -1739,6 +1753,37 @@ module Make<
17391753
)
17401754
}
17411755

1756+
final private class SourceOrSinkElementFinal = SourceOrSinkElement;
1757+
1758+
bindingset[this]
1759+
private class SourceSinkModelCallableBase extends SourceOrSinkElementFinal {
1760+
/**
1761+
* Holds if there exists a manual model that applies to this.
1762+
*/
1763+
final predicate hasManualModel() { any(Provenance p | this.hasProvenance(p)).isManual() }
1764+
1765+
/**
1766+
* Holds if this has provenance `p`.
1767+
*/
1768+
abstract predicate hasProvenance(Provenance p);
1769+
}
1770+
1771+
/**
1772+
* A callable that has a source model.
1773+
*/
1774+
abstract class SourceModelCallable extends SourceSinkModelCallableBase {
1775+
bindingset[this]
1776+
SourceModelCallable() { exists(this) }
1777+
}
1778+
1779+
/**
1780+
* A callable that has a sink model.
1781+
*/
1782+
abstract class SinkModelCallable extends SourceSinkModelCallableBase {
1783+
bindingset[this]
1784+
SinkModelCallable() { exists(this) }
1785+
}
1786+
17421787
/** A source or sink relevant for testing. */
17431788
signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement {
17441789
/** Gets the string representation of this callable used by `source/1` or `sink/1`. */

0 commit comments

Comments
 (0)