mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Guards: Rename -WithState to Parameterized-.
This commit is contained in:
@@ -1064,8 +1064,8 @@ module BarrierGuardWithIntParam<guardChecksNodeSig/4 guardChecksNode> {
|
|||||||
DataFlowIntegrationInput::Guard g, SsaImpl::Definition def, IRGuards::GuardValue val,
|
DataFlowIntegrationInput::Guard g, SsaImpl::Definition def, IRGuards::GuardValue val,
|
||||||
int indirectionIndex
|
int indirectionIndex
|
||||||
) {
|
) {
|
||||||
IRGuards::Guards_v1::ValidationWrapperWithState<int, guardChecksInstr/4>::guardChecksDef(g, def,
|
IRGuards::Guards_v1::ParameterizedValidationWrapper<int, guardChecksInstr/4>::guardChecksDef(g,
|
||||||
val, indirectionIndex)
|
def, val, indirectionIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
Node getABarrierNode(int indirectionIndex) {
|
Node getABarrierNode(int indirectionIndex) {
|
||||||
|
|||||||
@@ -1283,36 +1283,35 @@ module Make<
|
|||||||
signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv);
|
signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv);
|
||||||
|
|
||||||
bindingset[this]
|
bindingset[this]
|
||||||
signature class StateSig;
|
signature class ParamSig;
|
||||||
|
|
||||||
private module WithState<StateSig State> {
|
private module WithParam<ParamSig P> {
|
||||||
signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv, State state);
|
signature predicate guardChecksSig(Guard g, Expr e, GuardValue gv, P par);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extends a `BarrierGuard` input predicate with wrapped invocations.
|
* Extends a `BarrierGuard` input predicate with wrapped invocations.
|
||||||
*/
|
*/
|
||||||
module ValidationWrapper<guardChecksSig/3 guardChecks0> {
|
module ValidationWrapper<guardChecksSig/3 guardChecks0> {
|
||||||
private predicate guardChecksWithState(Guard g, Expr e, GuardValue gv, Unit state) {
|
private predicate guardChecksWithParam(Guard g, Expr e, GuardValue gv, Unit par) {
|
||||||
guardChecks0(g, e, gv) and exists(state)
|
guardChecks0(g, e, gv) and exists(par)
|
||||||
}
|
}
|
||||||
|
|
||||||
private module StatefulWrapper = ValidationWrapperWithState<Unit, guardChecksWithState/4>;
|
private module ParameterizedWrapper =
|
||||||
|
ParameterizedValidationWrapper<Unit, guardChecksWithParam/4>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if the guard `g` validates the SSA definition `def` upon evaluating to `val`.
|
* Holds if the guard `g` validates the SSA definition `def` upon evaluating to `val`.
|
||||||
*/
|
*/
|
||||||
predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val) {
|
predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val) {
|
||||||
StatefulWrapper::guardChecksDef(g, def, val, _)
|
ParameterizedWrapper::guardChecksDef(g, def, val, _)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extends a `BarrierGuard` input predicate with wrapped invocations.
|
* Extends a `BarrierGuard` input predicate with wrapped invocations.
|
||||||
*/
|
*/
|
||||||
module ValidationWrapperWithState<
|
module ParameterizedValidationWrapper<ParamSig P, WithParam<P>::guardChecksSig/4 guardChecks0> {
|
||||||
StateSig State, WithState<State>::guardChecksSig/4 guardChecks0>
|
|
||||||
{
|
|
||||||
private import WrapperGuard
|
private import WrapperGuard
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1321,12 +1320,12 @@ module Make<
|
|||||||
* parameter has been validated by the given guard.
|
* parameter has been validated by the given guard.
|
||||||
*/
|
*/
|
||||||
private predicate validReturnInValidationWrapper(
|
private predicate validReturnInValidationWrapper(
|
||||||
ReturnExpr ret, ParameterPosition ppos, GuardValue retval, State state
|
ReturnExpr ret, ParameterPosition ppos, GuardValue retval, P par
|
||||||
) {
|
) {
|
||||||
exists(NonOverridableMethod m, SsaParameterInit param, Guard guard, GuardValue val |
|
exists(NonOverridableMethod m, SsaParameterInit param, Guard guard, GuardValue val |
|
||||||
m.getAReturnExpr() = ret and
|
m.getAReturnExpr() = ret and
|
||||||
param.getParameter() = m.getParameter(ppos) and
|
param.getParameter() = m.getParameter(ppos) and
|
||||||
guardChecksDef(guard, param, val, state)
|
guardChecksDef(guard, param, val, par)
|
||||||
|
|
|
|
||||||
guard.valueControls(ret.getBasicBlock(), val) and
|
guard.valueControls(ret.getBasicBlock(), val) and
|
||||||
relevantReturnExprValue(m, ret, retval)
|
relevantReturnExprValue(m, ret, retval)
|
||||||
@@ -1341,7 +1340,7 @@ module Make<
|
|||||||
* that the argument has been validated by the given guard.
|
* that the argument has been validated by the given guard.
|
||||||
*/
|
*/
|
||||||
private NonOverridableMethod validationWrapper(
|
private NonOverridableMethod validationWrapper(
|
||||||
ParameterPosition ppos, GuardValue retval, State state
|
ParameterPosition ppos, GuardValue retval, P par
|
||||||
) {
|
) {
|
||||||
forex(ReturnExpr ret |
|
forex(ReturnExpr ret |
|
||||||
result.getAReturnExpr() = ret and
|
result.getAReturnExpr() = ret and
|
||||||
@@ -1350,12 +1349,12 @@ module Make<
|
|||||||
disjointValues(notRetval, retval)
|
disjointValues(notRetval, retval)
|
||||||
)
|
)
|
||||||
|
|
|
|
||||||
validReturnInValidationWrapper(ret, ppos, retval, state)
|
validReturnInValidationWrapper(ret, ppos, retval, par)
|
||||||
)
|
)
|
||||||
or
|
or
|
||||||
exists(SsaParameterInit param, BasicBlock bb, Guard guard, GuardValue val |
|
exists(SsaParameterInit param, BasicBlock bb, Guard guard, GuardValue val |
|
||||||
param.getParameter() = result.getParameter(ppos) and
|
param.getParameter() = result.getParameter(ppos) and
|
||||||
guardChecksDef(guard, param, val, state) and
|
guardChecksDef(guard, param, val, par) and
|
||||||
guard.valueControls(bb, val) and
|
guard.valueControls(bb, val) and
|
||||||
normalExitBlock(bb) and
|
normalExitBlock(bb) and
|
||||||
retval = TException(false)
|
retval = TException(false)
|
||||||
@@ -1365,12 +1364,12 @@ module Make<
|
|||||||
/**
|
/**
|
||||||
* Holds if the guard `g` validates the expression `e` upon evaluating to `val`.
|
* Holds if the guard `g` validates the expression `e` upon evaluating to `val`.
|
||||||
*/
|
*/
|
||||||
private predicate guardChecks(Guard g, Expr e, GuardValue val, State state) {
|
private predicate guardChecks(Guard g, Expr e, GuardValue val, P par) {
|
||||||
guardChecks0(g, e, val, state)
|
guardChecks0(g, e, val, par)
|
||||||
or
|
or
|
||||||
exists(NonOverridableMethodCall call, ParameterPosition ppos, ArgumentPosition apos |
|
exists(NonOverridableMethodCall call, ParameterPosition ppos, ArgumentPosition apos |
|
||||||
g = call and
|
g = call and
|
||||||
call.getMethod() = validationWrapper(ppos, val, state) and
|
call.getMethod() = validationWrapper(ppos, val, par) and
|
||||||
call.getArgument(apos) = e and
|
call.getArgument(apos) = e and
|
||||||
parameterMatch(pragma[only_bind_out](ppos), pragma[only_bind_out](apos))
|
parameterMatch(pragma[only_bind_out](ppos), pragma[only_bind_out](apos))
|
||||||
)
|
)
|
||||||
@@ -1379,9 +1378,9 @@ module Make<
|
|||||||
/**
|
/**
|
||||||
* Holds if the guard `g` validates the SSA definition `def` upon evaluating to `val`.
|
* Holds if the guard `g` validates the SSA definition `def` upon evaluating to `val`.
|
||||||
*/
|
*/
|
||||||
predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val, State state) {
|
predicate guardChecksDef(Guard g, SsaDefinition def, GuardValue val, P par) {
|
||||||
exists(Expr e |
|
exists(Expr e |
|
||||||
guardChecks(g, e, val, state) and
|
guardChecks(g, e, val, par) and
|
||||||
guardReadsSsaVar(e, def)
|
guardReadsSsaVar(e, def)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user