Dataflow: Sync.

This commit is contained in:
Anders Schack-Mulligen
2023-12-01 15:47:21 +01:00
parent fd920b8585
commit 67f0529cda
48 changed files with 632 additions and 496 deletions

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }

View File

@@ -14,6 +14,8 @@ import FlowStateString
private import codeql.util.Unit private import codeql.util.Unit
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines * A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension * use of the global data flow library must define its own unique extension
@@ -48,7 +50,7 @@ private import codeql.util.Unit
* should instead depend on a `DataFlow2::Configuration`, a * should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/ */
abstract class Configuration extends string { abstract deprecated class Configuration extends string {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }
@@ -189,7 +191,7 @@ abstract class Configuration extends string {
* Good performance cannot be guaranteed in the presence of such recursion, so * Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library. * it should be replaced by using more than one copy of the data flow library.
*/ */
abstract private class ConfigurationRecursionPrevention extends Configuration { abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this] bindingset[this]
ConfigurationRecursionPrevention() { any() } ConfigurationRecursionPrevention() { any() }
@@ -210,7 +212,7 @@ abstract private class ConfigurationRecursionPrevention extends Configuration {
} }
} }
private FlowState relevantState(Configuration config) { deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or config.isSource(_, result) or
config.isSink(_, result) or config.isSink(_, result) or
config.isBarrier(_, result) or config.isBarrier(_, result) or
@@ -219,17 +221,17 @@ private FlowState relevantState(Configuration config) {
} }
private newtype TConfigState = private newtype TConfigState =
TMkConfigState(Configuration config, FlowState state) { deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty state = relevantState(config) or state instanceof FlowStateEmpty
} }
private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) } deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) } deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
private predicate singleConfiguration() { 1 = strictcount(Configuration c) } deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
private module Config implements FullStateConfigSig { deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState; class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) { predicate isSource(Node source, FlowState state) {
@@ -296,13 +298,13 @@ private module Config implements FullStateConfigSig {
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() } predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
} }
private import Impl<Config> as I deprecated private import Impl<Config> as I
/** /**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration. * A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated. * Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/ */
class PathNode instanceof I::PathNode { deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */ /** Gets a textual representation of this element. */
final string toString() { result = super.toString() } final string toString() { result = super.toString() }
@@ -329,10 +331,10 @@ class PathNode instanceof I::PathNode {
final Node getNode() { result = super.getNode() } final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */ /** Gets the `FlowState` of this node. */
final FlowState getState() { result = getState(super.getState()) } deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */ /** Gets the associated configuration. */
final Configuration getConfiguration() { result = getConfig(super.getState()) } deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */ /** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() } final PathNode getASuccessor() { result = super.getASuccessor() }
@@ -347,9 +349,9 @@ class PathNode instanceof I::PathNode {
final predicate isSinkGroup(string group) { super.isSinkGroup(group) } final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
} }
module PathGraph = I::PathGraph; deprecated module PathGraph = I::PathGraph;
private predicate hasFlow(Node source, Node sink, Configuration config) { deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 | exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and hasFlowPath(source0, sink0, config) and
source0.getNode() = source and source0.getNode() = source and
@@ -357,10 +359,10 @@ private predicate hasFlow(Node source, Node sink, Configuration config) {
) )
} }
private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) { deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config I::flowPath(source, sink) and source.getConfiguration() = config
} }
private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) } deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
predicate flowsTo = hasFlow/3; deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,4 +1,6 @@
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking. * Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis * This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly * from `TaintTrackingParameter::Public` and adds a global analysis, mainly
@@ -12,6 +14,8 @@ import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private private import TaintTrackingParameter::Private
/** /**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines * A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each * sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of * use of the taint tracking library must define its own unique extension of
@@ -51,7 +55,7 @@ private import TaintTrackingParameter::Private
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a * Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/ */
abstract class Configuration extends DataFlow::Configuration { abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this] bindingset[this]
Configuration() { any() } Configuration() { any() }