Skip to content

Commit f14e1cc

Browse files
committed
PS: Add more expression classes and a helper class for calls.
1 parent d616506 commit f14e1cc

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

powershell/ql/lib/powershell.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ import semmle.code.powershell.Pipeline
7070
import semmle.code.powershell.StringConstantExpression
7171
import semmle.code.powershell.MemberExpr
7272
import semmle.code.powershell.InvokeMemberExpression
73+
import semmle.code.powershell.Call
7374
import semmle.code.powershell.SubExpression
75+
import semmle.code.powershell.ErrorExpr
7476
import semmle.code.powershell.ConvertExpr
7577
import semmle.code.powershell.IndexExpr
7678
import semmle.code.powershell.HashTable
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import powershell
2+
3+
abstract private class AbstractCall extends Ast {
4+
abstract Expr getCommand();
5+
6+
abstract Expr getArgument(int i);
7+
8+
Expr getNamedArgument(string name) { none() }
9+
10+
Expr getQualifier() { none() }
11+
}
12+
13+
private class CmdCall extends AbstractCall instanceof Cmd {
14+
final override Expr getCommand() { result = Cmd.super.getCommand() }
15+
16+
final override Expr getArgument(int i) { result = Cmd.super.getArgument(i) }
17+
18+
final override Expr getNamedArgument(string name) { result = Cmd.super.getNamedArgument(name) }
19+
}
20+
21+
private class InvokeMemberCall extends AbstractCall instanceof InvokeMemberExpr {
22+
final override Expr getCommand() { result = super.getMember() }
23+
24+
final override Expr getArgument(int i) { result = InvokeMemberExpr.super.getArgument(i) }
25+
26+
final override Expr getQualifier() { result = InvokeMemberExpr.super.getQualifier() }
27+
}
28+
29+
final class Call = AbstractCall;

powershell/ql/lib/semmle/code/powershell/Command.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class Cmd extends @command, CmdBase {
1515

1616
CmdElement getElement(int i) { command_command_element(this, i, result) }
1717

18+
Expr getCommand() { result = this.getElement(0) }
19+
1820
StringConstExpr getCmdName() { result = this.getElement(0) }
1921

2022
Expr getArgument(int i) {
@@ -43,7 +45,7 @@ class Cmd extends @command, CmdBase {
4345

4446
/**
4547
* An argument to a command.
46-
*
48+
*
4749
* The argument may be named or positional.
4850
*/
4951
class Argument extends Expr {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import powershell
2+
3+
class ErrorExpr extends @error_expression, Expr {
4+
final override SourceLocation getLocation() { error_expression_location(this, result) }
5+
6+
final override string toString() { result = "error" }
7+
}

0 commit comments

Comments
 (0)