From a6fd5b6e59431bafbd5cbc19d0401f3cba47b555 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 17 Jan 2023 11:55:49 +0100 Subject: [PATCH] DataFlow: Add `uniqueParameterNodePositionExclude` --- .../cpp/ir/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ .../code/cpp/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ .../cpp/ir/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ .../csharp/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ .../code/java/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ .../dataflow/new/internal/DataFlowImplConsistency.qll | 6 ++++++ .../ruby/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ .../swift/dataflow/internal/DataFlowImplConsistency.qll | 6 ++++++ 8 files changed, 48 insertions(+) diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplConsistency.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplConsistency.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplConsistency.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplConsistency.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions." diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll index 245de04d3ce..9bbc70fbdf9 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll @@ -50,6 +50,11 @@ module Consistency { predicate uniqueParameterNodeAtPositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { none() } + + /** Holds if `(c, pos, p)` should be excluded from the consistency test `uniqueParameterNodePosition`. */ + predicate uniqueParameterNodePositionExclude(DataFlowCallable c, ParameterPosition pos, Node p) { + none() + } } private class RelevantNode extends Node { @@ -260,6 +265,7 @@ module Consistency { query predicate uniqueParameterNodePosition( DataFlowCallable c, ParameterPosition pos, Node p, string msg ) { + not any(ConsistencyConfiguration conf).uniqueParameterNodePositionExclude(c, pos, p) and isParameterNode(p, c, pos) and not exists(unique(ParameterPosition pos0 | isParameterNode(p, c, pos0))) and msg = "Parameter node with multiple positions."