JS: Simplify type hierarchy for SourceNode

The charpred caused spurious type to appear
This commit is contained in:
Asger F
2022-07-29 19:44:10 +02:00
parent b50f4bc1a8
commit 98a9cb0b55
3 changed files with 1 additions and 28 deletions

View File

@@ -33,13 +33,7 @@ private import semmle.javascript.internal.CachedStages
* import("fs")
* ```
*/
class SourceNode extends DataFlow::Node {
SourceNode() {
this instanceof SourceNode::Range
or
none() and this instanceof SourceNode::Internal::RecursionGuard
}
class SourceNode extends DataFlow::Node instanceof SourceNode::Range {
/**
* Holds if this node flows into `sink` in zero or more local (that is,
* intra-procedural) steps.
@@ -340,12 +334,6 @@ module SourceNode {
DataFlow::functionReturnNode(this, _)
}
}
/** INTERNAL. DO NOT USE. */
module Internal {
/** An empty class that some tests are using to enforce that SourceNode is non-recursive. */
abstract class RecursionGuard extends DataFlow::Node { }
}
}
private class NodeModuleSourcesNodes extends SourceNode::Range {

View File

@@ -1,14 +0,0 @@
/**
* Test that fails to compile if the domain of `SourceNode::Range` depends on `SourceNode` (recursively).
*
* This tests adds a negative dependency `SourceNode --!--> SourceNode::Range`
* so that the undesired edge `SourceNode::Range --> SourceNode` completes a negative cycle.
*/
import javascript
class BadSourceNodeRange extends DataFlow::SourceNode::Internal::RecursionGuard {
BadSourceNodeRange() { not this instanceof DataFlow::SourceNode::Range }
}
select "Success"