From 85344bfb13e9ee3fa3ae42dba61df576fad83f23 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 10 Oct 2022 15:36:58 +0200 Subject: [PATCH 1/2] Data flow: Improved `fastTC` bound in `PathNodeImpl::getANonHiddenSuccessor` Before ``` [2022-10-10 14:34:54] Evaluated non-recursive predicate __DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp__#higher_order_body@4bb14aoj in 262ms (size: 2418048). Evaluated relational algebra for predicate __DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp__#higher_order_body@4bb14aoj with tuple counts: 4141389 ~75% {1} r1 = SCAN _DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp#__#shared OUTPUT In.1 return r1 [2022-10-10 14:34:57] Evaluated non-recursive predicate boundedFastTC:DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorIfHidden#0#dispred#ff:__DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp__#higher_order_body@fb66bb06 in 2754ms (size: 7448123). [2022-10-10 14:35:09] Evaluated non-recursive predicate DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor#0#dispred#ff@77ff066b in 10892ms (size: 2830055). Evaluated relational algebra for predicate DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor#0#dispred#ff@77ff066b with tuple counts: 4141389 ~0% {3} r1 = SCAN _DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp#__#shared OUTPUT In.0, In.1, In.1 2192551 ~4% {3} r2 = r1 AND NOT DataFlowImplForRegExp#43df744e::PathNodeImpl::isHidden#0#dispred#f(Lhs.2) 2192551 ~4% {2} r3 = SCAN r2 OUTPUT In.0, In.2 4141389 ~0% {2} r4 = SCAN _DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp#__#shared OUTPUT In.1, In.0 147138810 ~0% {3} r5 = JOIN r4 WITH boundedFastTC:DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorIfHidden#0#dispred#ff:__DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff_DataFlowImplForRegExp__#higher_order_body ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Rhs.1 637649 ~3% {3} r6 = r5 AND NOT DataFlowImplForRegExp#43df744e::PathNodeImpl::isHidden#0#dispred#f(Lhs.2) 637649 ~2% {2} r7 = SCAN r6 OUTPUT In.0, In.2 2830200 ~0% {2} r8 = r3 UNION r7 return r8 ``` After ``` [2022-10-10 14:59:08] Evaluated non-recursive predicate boundedFastTC:DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorIfHidden#0#dispred#ff_10#higher_order_body:_DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorIfHidden#0#dispred#ff_DataFlowImplForReg__#higher_order_body@98a323ne in 384ms (size: 671076). [2022-10-10 14:59:09] Evaluated non-recursive predicate DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor0#ff@69f158pf in 222ms (size: 2805795). Evaluated relational algebra for predicate DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor0#ff@69f158pf with tuple counts: 2155019 ~0% {1} r1 = DataFlowImplForRegExp#43df744e::PathNodeImpl#class#f AND NOT DataFlowImplForRegExp#43df744e::PathNodeImpl::isHidden#0#dispred#f(Lhs.0) 2155019 ~0% {2} r2 = SCAN r1 OUTPUT In.0, In.0 650776 ~0% {2} r3 = boundedFastTC:DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorIfHidden#0#dispred#ff_10#higher_order_body:_DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorIfHidden#0#dispred#ff_DataFlowImplForReg__#higher_order_body AND NOT DataFlowImplForRegExp#43df744e::PathNodeImpl::isHidden#0#dispred#f(Lhs.0) 650776 ~0% {2} r4 = SCAN r3 OUTPUT In.1, In.0 2805795 ~0% {2} r5 = r2 UNION r4 return r5 [2022-10-10 14:59:09] Evaluated non-recursive predicate DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor#0#dispred#ff@5ae9fc5n in 445ms (size: 2830062). Evaluated relational algebra for predicate DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor#0#dispred#ff@5ae9fc5n with tuple counts: 4141389 ~5% {2} r1 = DataFlowImplForRegExp#43df744e::PathNodeImpl::getASuccessorImpl#0#dispred#ff AND NOT DataFlowImplForRegExp#43df744e::PathNodeImpl::isHidden#0#dispred#f(Lhs.0) 4141389 ~0% {2} r2 = SCAN r1 OUTPUT In.1, In.0 2830200 ~0% {2} r3 = JOIN r2 WITH DataFlowImplForRegExp#43df744e::PathNodeImpl::getANonHiddenSuccessor0#ff ON FIRST 1 OUTPUT Lhs.1, Rhs.1 return r3 ``` --- .../code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { From ffb2b1c15e1d6b7650eac2ac3384e964699588c9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 10 Oct 2022 15:39:13 +0200 Subject: [PATCH 2/2] Data flow: Sync files --- .../code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 11 ++++++++--- .../code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 11 ++++++++--- .../code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 11 ++++++++--- .../code/cpp/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- .../code/cpp/dataflow/internal/DataFlowImpl2.qll | 11 ++++++++--- .../code/cpp/dataflow/internal/DataFlowImpl3.qll | 11 ++++++++--- .../code/cpp/dataflow/internal/DataFlowImpl4.qll | 11 ++++++++--- .../code/cpp/dataflow/internal/DataFlowImplLocal.qll | 11 ++++++++--- .../code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- .../code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 11 ++++++++--- .../code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 11 ++++++++--- .../code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 11 ++++++++--- .../code/csharp/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- .../code/csharp/dataflow/internal/DataFlowImpl2.qll | 11 ++++++++--- .../code/csharp/dataflow/internal/DataFlowImpl3.qll | 11 ++++++++--- .../code/csharp/dataflow/internal/DataFlowImpl4.qll | 11 ++++++++--- .../code/csharp/dataflow/internal/DataFlowImpl5.qll | 11 ++++++++--- .../internal/DataFlowImplForContentDataFlow.qll | 11 ++++++++--- .../code/java/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- .../code/java/dataflow/internal/DataFlowImpl2.qll | 11 ++++++++--- .../code/java/dataflow/internal/DataFlowImpl3.qll | 11 ++++++++--- .../code/java/dataflow/internal/DataFlowImpl4.qll | 11 ++++++++--- .../code/java/dataflow/internal/DataFlowImpl5.qll | 11 ++++++++--- .../code/java/dataflow/internal/DataFlowImpl6.qll | 11 ++++++++--- .../internal/DataFlowImplForOnActivityResult.qll | 11 ++++++++--- .../internal/DataFlowImplForSerializability.qll | 11 ++++++++--- .../python/dataflow/new/internal/DataFlowImpl.qll | 11 ++++++++--- .../python/dataflow/new/internal/DataFlowImpl2.qll | 11 ++++++++--- .../python/dataflow/new/internal/DataFlowImpl3.qll | 11 ++++++++--- .../python/dataflow/new/internal/DataFlowImpl4.qll | 11 ++++++++--- .../codeql/ruby/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- .../codeql/ruby/dataflow/internal/DataFlowImpl2.qll | 11 ++++++++--- .../internal/DataFlowImplForHttpClientLibraries.qll | 11 ++++++++--- .../dataflow/internal/DataFlowImplForPathname.qll | 11 ++++++++--- .../ruby/dataflow/internal/DataFlowImplForRegExp.qll | 11 ++++++++--- .../codeql/swift/dataflow/internal/DataFlowImpl.qll | 11 ++++++++--- 36 files changed, 288 insertions(+), 108 deletions(-) diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForHttpClientLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForHttpClientLibraries.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForHttpClientLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForHttpClientLibraries.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForPathname.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForPathname.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForPathname.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForPathname.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForRegExp.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForRegExp.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForRegExp.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForRegExp.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() { diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll index c8d9d66e1b9..9053019a6d0 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll @@ -2927,12 +2927,17 @@ abstract private class PathNodeImpl extends PathNode { result = this.getASuccessorImpl() } - final PathNodeImpl getANonHiddenSuccessor() { - result = this.getASuccessorImpl().getASuccessorIfHidden*() and - not this.isHidden() and + pragma[nomagic] + private PathNodeImpl getANonHiddenSuccessor0() { + result = this.getASuccessorIfHidden*() and not result.isHidden() } + final PathNodeImpl getANonHiddenSuccessor() { + result = this.getASuccessorImpl().getANonHiddenSuccessor0() and + not this.isHidden() + } + abstract NodeEx getNodeEx(); predicate isHidden() {