Merge pull request #14299 from aschackmull/dataflow/more-defaults

Dataflow: Make use of defaults for language-specific hooks.
This commit is contained in:
Anders Schack-Mulligen
2023-09-25 11:19:44 +02:00
committed by GitHub
17 changed files with 11 additions and 135 deletions

View File

@@ -79,13 +79,3 @@ class ArgumentPosition extends int {
/** Holds if arguments at position `apos` match parameters at position `ppos`. */ /** Holds if arguments at position `apos` match parameters at position `ppos`. */
pragma[inline] pragma[inline]
predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg) {
any()
}

View File

@@ -297,12 +297,3 @@ class ContentApprox = Unit;
/** Gets an approximated value for content `c`. */ /** Gets an approximated value for content `c`. */
pragma[inline] pragma[inline]
ContentApprox getContentApprox(Content c) { any() } ContentApprox getContentApprox(Content c) { any() }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }

View File

@@ -271,13 +271,3 @@ DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) {
/** Holds if arguments at position `apos` match parameters at position `ppos`. */ /** Holds if arguments at position `apos` match parameters at position `ppos`. */
pragma[inline] pragma[inline]
predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg) {
any()
}

View File

@@ -18,4 +18,6 @@ module CppDataFlow implements InputSig {
import Public import Public
Node exprNode(DataFlowExpr e) { result = Public::exprNode(e) } Node exprNode(DataFlowExpr e) { result = Public::exprNode(e) }
predicate getAdditionalFlowIntoCallNodeTerm = Private::getAdditionalFlowIntoCallNodeTerm/2;
} }

View File

@@ -528,13 +528,3 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) {
apos.isImplicitCapturedArgumentPosition(v) apos.isImplicitCapturedArgumentPosition(v)
) )
} }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg) {
any()
}

View File

@@ -2420,12 +2420,3 @@ module Csv {
) )
} }
} }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }

View File

@@ -20,4 +20,6 @@ module GoDataFlow implements InputSig {
predicate neverSkipInPathGraph = Private::neverSkipInPathGraph/1; predicate neverSkipInPathGraph = Private::neverSkipInPathGraph/1;
Node exprNode(DataFlowExpr e) { result = Public::exprNode(e) } Node exprNode(DataFlowExpr e) { result = Public::exprNode(e) }
predicate golangSpecificParamArgFilter = Private::golangSpecificParamArgFilter/3;
} }

View File

@@ -423,12 +423,3 @@ class ContentApprox = Unit;
/** Gets an approximated value for content `c`. */ /** Gets an approximated value for content `c`. */
pragma[inline] pragma[inline]
ContentApprox getContentApprox(Content c) { any() } ContentApprox getContentApprox(Content c) { any() }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }

View File

@@ -171,16 +171,6 @@ private module DispatchImpl {
/** Holds if arguments at position `apos` match parameters at position `ppos`. */ /** Holds if arguments at position `apos` match parameters at position `ppos`. */
pragma[inline] pragma[inline]
predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg) {
any()
}
} }
import DispatchImpl import DispatchImpl

View File

@@ -593,12 +593,3 @@ predicate containerContent(Content c) {
c instanceof MapKeyContent or c instanceof MapKeyContent or
c instanceof MapValueContent c instanceof MapValueContent
} }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }

View File

@@ -1639,13 +1639,3 @@ private module OutNodes {
* `kind`. * `kind`.
*/ */
OutNode getAnOutNode(DataFlowCall call, ReturnKind kind) { call = result.getCall(kind) } OutNode getAnOutNode(DataFlowCall call, ReturnKind kind) { call = result.getCall(kind) }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg) {
any()
}

View File

@@ -1002,12 +1002,3 @@ class ContentApprox = Unit;
/** Gets an approximated value for content `c`. */ /** Gets an approximated value for content `c`. */
pragma[inline] pragma[inline]
ContentApprox getContentApprox(Content c) { any() } ContentApprox getContentApprox(Content c) { any() }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }

View File

@@ -1456,13 +1456,3 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) {
or or
apos.isAnyNamed() and ppos.isKeyword(_) apos.isAnyNamed() and ppos.isKeyword(_)
} }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNodeImpl p, ArgumentNode arg) {
any()
}

View File

@@ -1975,12 +1975,3 @@ class AdditionalJumpStep extends Unit {
*/ */
abstract predicate step(Node pred, Node succ); abstract predicate step(Node pred, Node succ);
} }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNodeImpl p) { none() }

View File

@@ -226,9 +226,14 @@ signature module InputSig {
* *
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter. * Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/ */
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p); default int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg); bindingset[call, p, arg]
default predicate golangSpecificParamArgFilter(
DataFlowCall call, ParameterNode p, ArgumentNode arg
) {
any()
}
} }
module Configs<InputSig Lang> { module Configs<InputSig Lang> {

View File

@@ -355,13 +355,3 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) {
or or
ppos.(PositionalParameterPosition).getIndex() = apos.(PositionalArgumentPosition).getIndex() ppos.(PositionalParameterPosition).getIndex() = apos.(PositionalArgumentPosition).getIndex()
} }
/**
* Holds if flow from `call`'s argument `arg` to parameter `p` is permissible.
*
* This is a temporary hook to support technical debt in the Go language; do not use.
*/
pragma[inline]
predicate golangSpecificParamArgFilter(DataFlowCall call, ParameterNode p, ArgumentNode arg) {
any()
}

View File

@@ -1153,12 +1153,3 @@ class ContentApprox = Unit;
/** Gets an approximated value for content `c`. */ /** Gets an approximated value for content `c`. */
pragma[inline] pragma[inline]
ContentApprox getContentApprox(Content c) { any() } ContentApprox getContentApprox(Content c) { any() }
/**
* Gets an additional term that is added to the `join` and `branch` computations to reflect
* an additional forward or backwards branching factor that is not taken into account
* when calculating the (virtual) dispatch cost.
*
* Argument `arg` is part of a path from a source to a sink, and `p` is the target parameter.
*/
int getAdditionalFlowIntoCallNodeTerm(ArgumentNode arg, ParameterNode p) { none() }