JS: Deprecate DataFlow::BarrierGuardNode

This commit is contained in:
Asger F
2024-12-02 13:09:53 +01:00
parent b3461989b1
commit 3f0d0e3a05
4 changed files with 22 additions and 11 deletions

View File

@@ -367,8 +367,7 @@ abstract private class BarrierGuardNodeInternal extends DataFlow::Node { }
* classes as precise as possible: if two subclasses of `BarrierGuardNode` overlap, their
* implementations of `blocks` will _both_ apply to any configuration that includes either of them.
*/
abstract class BarrierGuardNode extends BarrierGuardNodeInternal {
// TODO: deprecate this class; currently requires too much refactoring
abstract deprecated class BarrierGuardNode extends BarrierGuardNodeInternal {
/**
* Holds if this node blocks expression `e` provided it evaluates to `outcome`.
*

View File

@@ -63,13 +63,21 @@ module MakeLabeledBarrierGuard<LabeledBarrierGuardSig BaseGuard> {
}
}
deprecated private signature predicate isBarrierGuardSig(DataFlow::BarrierGuardNode node);
/**
* Contains deprecated signatures.
*
* This module is a workaround for the fact that deprecated signatures can't refer to deprecated classes
* without getting a deprecation warning
*/
deprecated private module DeprecatedSigs {
signature predicate isBarrierGuardSig(DataFlow::BarrierGuardNode node);
}
/**
* Converts a labeled barrier guard class to a set of nodes to include in an implementation of `isBarrier(node)` and `isBarrier(node, label)`
* in a `DataFlow::StateConfigSig` implementation.
*/
deprecated module MakeLegacyBarrierGuardLabeled<isBarrierGuardSig/1 isBarrierGuard> {
deprecated module MakeLegacyBarrierGuardLabeled<DeprecatedSigs::isBarrierGuardSig/1 isBarrierGuard> {
final private class FinalNode = DataFlow::Node;
private class Adapter extends FinalNode instanceof DataFlow::BarrierGuardNode {
@@ -100,7 +108,7 @@ deprecated module MakeLegacyBarrierGuardLabeled<isBarrierGuardSig/1 isBarrierGua
/**
* Converts a barrier guard class to a set of nodes to include in an implementation of `isBarrier(node)` in a `DataFlow::ConfigSig` implementation.
*/
deprecated module MakeLegacyBarrierGuard<isBarrierGuardSig/1 isBarrierGuard> {
deprecated module MakeLegacyBarrierGuard<DeprecatedSigs::isBarrierGuardSig/1 isBarrierGuard> {
final private class FinalNode = DataFlow::Node;
private class Adapter extends FinalNode instanceof DataFlow::BarrierGuardNode {

View File

@@ -19,17 +19,20 @@ module TestConfig implements DataFlow::ConfigSig {
module TestFlow = DataFlow::Global<TestConfig>;
class SimpleBarrierGuardNode extends DataFlow::BarrierGuardNode, DataFlow::InvokeNode {
class SimpleBarrierGuardNode extends DataFlow::InvokeNode {
SimpleBarrierGuardNode() { this.getCalleeName() = "BARRIER" }
override predicate blocks(boolean outcome, Expr e) { this.blocksExpr(outcome, e) }
predicate blocksExpr(boolean outcome, Expr e) {
outcome = true and
e = this.getArgument(0).asExpr()
}
}
deprecated class SimpleBarrierGuardNodeLegacy extends DataFlow::BarrierGuardNode instanceof SimpleBarrierGuardNode
{
override predicate blocks(boolean outcome, Expr e) { super.blocksExpr(outcome, e) }
}
deprecated class LegacyConfig extends DataFlow::Configuration {
LegacyConfig() { this = "LegacyConfig" }
@@ -38,7 +41,7 @@ deprecated class LegacyConfig extends DataFlow::Configuration {
override predicate isSink(DataFlow::Node sink) { TestConfig::isSink(sink) }
override predicate isBarrierGuard(DataFlow::BarrierGuardNode guard) {
guard instanceof SimpleBarrierGuardNode
guard instanceof SimpleBarrierGuardNodeLegacy
}
}

View File

@@ -22,8 +22,9 @@ class BasicBarrierGuard extends DataFlow::CallNode {
}
}
deprecated class BasicBarrierGuardLegacy extends DataFlow::BarrierGuardNode, BasicBarrierGuard {
override predicate blocks(boolean outcome, Expr e) { this.blocksExpr(outcome, e) }
deprecated class BasicBarrierGuardLegacy extends DataFlow::BarrierGuardNode instanceof BasicBarrierGuard
{
override predicate blocks(boolean outcome, Expr e) { super.blocksExpr(outcome, e) }
}
deprecated class LegacyConfig extends DataFlow::Configuration {