mirror of
https://github.com/github/codeql.git
synced 2026-05-25 00:27:09 +02:00
PS: Add tests.
This commit is contained in:
@@ -128,6 +128,8 @@ abstract private class NonExprChildMapping extends ChildMapping {
|
||||
abstract private class AbstractCallCfgNode extends AstCfgNode {
|
||||
override string getAPrimaryQlClass() { result = "CfgCall" }
|
||||
|
||||
final predicate hasName(string name) { this.getName() = name }
|
||||
|
||||
abstract string getName();
|
||||
|
||||
ExprCfgNode getQualifier() { none() }
|
||||
@@ -231,7 +233,7 @@ module ExprNodes {
|
||||
final override ExprCfgNode getCommand() { none() }
|
||||
}
|
||||
|
||||
/** A control-flow node that wraps an `ConstructorCall` expression. */
|
||||
/** A control-flow node that wraps an `ConstructorCall` expression. */
|
||||
class ConstructorCallCfgNode extends InvokeMemberCfgNode {
|
||||
ConstructorCallCfgNode() { super.getExpr() instanceof ConstructorCall }
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ private predicate qualifiedCall(CfgNodes::CallCfgNode call, Node receiver, strin
|
||||
call.getName() = method
|
||||
}
|
||||
|
||||
private Node trackInstance(Type t, boolean exact) {
|
||||
Node trackInstance(Type t, boolean exact) {
|
||||
result =
|
||||
CallGraphConstruction::Make<TrackInstanceInput>::track(TrackInstanceInput::MkState(t, exact))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
testFailures
|
||||
failures
|
||||
@@ -0,0 +1,19 @@
|
||||
class MyClass {
|
||||
[string] $field
|
||||
MyClass($val) {
|
||||
$this.field = $val
|
||||
}
|
||||
}
|
||||
|
||||
$myClass = [MyClass]::new("hello")
|
||||
|
||||
Sink $myClass # $ MISSING: type=MyClass
|
||||
|
||||
|
||||
$withNamedArg = New-Object -TypeName PSObject
|
||||
|
||||
Sink $withNamedArg # $ MISSING: type=PSObject
|
||||
|
||||
$withPositionalArg = New-Object PSObject
|
||||
|
||||
Sink $withPositionalArg # $ MISSING: type=PSObject
|
||||
@@ -0,0 +1,23 @@
|
||||
import powershell
|
||||
import semmle.code.powershell.dataflow.internal.DataFlowDispatch
|
||||
import semmle.code.powershell.dataflow.internal.DataFlowPublic
|
||||
import semmle.code.powershell.dataflow.internal.DataFlowPrivate
|
||||
import TestUtilities.InlineExpectationsTest
|
||||
|
||||
module TypeTrackingTest implements TestSig {
|
||||
string getARelevantTag() { result = "type" }
|
||||
|
||||
predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
exists(Node n, DataFlowCall c, Type t |
|
||||
location = n.getLocation() and
|
||||
element = n.toString() and
|
||||
tag = "type" and
|
||||
value = t.getName() and
|
||||
n = trackInstance(t, _) and
|
||||
isArgumentNode(n, c, _) and
|
||||
c.asCall().hasName("Sink")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
import MakeTest<TypeTrackingTest>
|
||||
Reference in New Issue
Block a user