Skip to content

Commit 8c8440a

Browse files
authored
Merge pull request #9101 from hvitved/dataflow/include-hidden
Data flow: Add `Configuration::includeHiddenNodes()`
2 parents 762f7bf + 712fe00 commit 8c8440a

29 files changed

+464
-145
lines changed

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ abstract class Configuration extends string {
170170
*/
171171
int explorationLimit() { none() }
172172

173+
/**
174+
* Holds if hidden nodes should be included in the data flow graph.
175+
*
176+
* This feature should only be used for debugging or when the data flow graph
177+
* is not visualized (for example in a `path-problem` query).
178+
*/
179+
predicate includeHiddenNodes() { none() }
180+
173181
/**
174182
* Holds if there is a partial data flow path from `source` to `node`. The
175183
* approximate distance between `node` and the closest source is `dist` and
@@ -3868,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode {
38683876
abstract NodeEx getNodeEx();
38693877

38703878
predicate isHidden() {
3871-
hiddenNode(this.getNodeEx().asNode()) and
3872-
not this.isSource() and
3873-
not this instanceof PathNodeSink
3874-
or
3875-
this.getNodeEx() instanceof TNodeImplicitRead
3879+
not this.getConfiguration().includeHiddenNodes() and
3880+
(
3881+
hiddenNode(this.getNodeEx().asNode()) and
3882+
not this.isSource() and
3883+
not this instanceof PathNodeSink
3884+
or
3885+
this.getNodeEx() instanceof TNodeImplicitRead
3886+
)
38763887
}
38773888

38783889
private string ppAp() {

0 commit comments

Comments
 (0)