Skip to content

Commit 03bce1c

Browse files
authored
Merge pull request #202 from microsoft/fix-to-string-on-unknown-static-read
PS: Fix `toString` on unknown static field access
2 parents 21210c6 + 37a6b04 commit 03bce1c

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

powershell/ql/lib/semmle/code/powershell/ast/internal/MemberExpr.qll

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,26 @@ class MemberExpr extends Expr, TMemberExpr {
2929

3030
/** Gets the name of the member being looked up, if any. */
3131
string getMemberName() {
32-
result = getRawAst(this).(Raw::MemberExpr).getMember().(Raw::StringConstExpr).getValue().getValue()
32+
result =
33+
getRawAst(this).(Raw::MemberExpr).getMember().(Raw::StringConstExpr).getValue().getValue()
3334
}
3435

3536
predicate isNullConditional() { getRawAst(this).(Raw::MemberExpr).isNullConditional() }
3637

3738
predicate isStatic() { getRawAst(this).(Raw::MemberExpr).isStatic() }
3839

39-
final override string toString() { result = this.getMemberName() }
40+
final override string toString() {
41+
result = this.getMemberName()
42+
or
43+
not exists(this.getMemberName()) and
44+
result = "..."
45+
}
4046

4147
predicate isExplicitWrite(Ast assignment) {
4248
explicitAssignment(getRawAst(this), getRawAst(assignment))
4349
}
4450

45-
predicate isImplicitWrite() {
46-
implicitAssignment(getRawAst(this))
47-
}
51+
predicate isImplicitWrite() { implicitAssignment(getRawAst(this)) }
4852
}
4953

5054
/** A `MemberExpr` that is being written to. */
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
param($x)
2+
[DateTime]::$x

powershell/ql/test/library-tests/ast/Expressions/expressions.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ cmdExpr
55
| BinaryExpression.ps1:4:1:4:7 | [Stmt] result | BinaryExpression.ps1:4:1:4:7 | result |
66
| ExpandableString.ps1:1:1:1:39 | [Stmt] Date: $([DateTime]::Now)\nName: $name | ExpandableString.ps1:1:1:1:39 | Date: $([DateTime]::Now)\nName: $name |
77
| ExpandableString.ps1:1:23:1:37 | [Stmt] Now | ExpandableString.ps1:1:23:1:37 | Now |
8+
| MemberExpression.ps1:2:1:2:14 | [Stmt] ... | MemberExpression.ps1:2:1:2:14 | ... |
89
| SubExpression.ps1:1:1:1:23 | [Stmt] Call to AddDays | SubExpression.ps1:1:1:1:23 | Call to AddDays |
910
| SubExpression.ps1:1:3:1:10 | [Stmt] Call to Get-Date | SubExpression.ps1:1:3:1:10 | Call to Get-Date |
1011
| SubExpression.ps1:2:1:2:21 | [Stmt] Call to AddDays | SubExpression.ps1:2:1:2:21 | Call to AddDays |
@@ -13,3 +14,6 @@ invokeMemoryExpression
1314
| SubExpression.ps1:1:1:1:23 | Call to AddDays | SubExpression.ps1:1:1:1:11 | $(...) | 0 | SubExpression.ps1:1:21:1:22 | 10 |
1415
expandableString
1516
| ExpandableString.ps1:1:1:1:39 | Date: $([DateTime]::Now)\nName: $name | 1 | ExpandableString.ps1:1:21:1:38 | $(...) |
17+
memberExpr
18+
| ExpandableString.ps1:1:23:1:37 | Now | ExpandableString.ps1:1:23:1:32 | DateTime |
19+
| MemberExpression.ps1:2:1:2:14 | ... | MemberExpression.ps1:2:1:2:10 | DateTime |
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import powershell
22

33
query predicate binaryExpr(BinaryExpr e, Expr e1, Expr e2) {
4-
e1 = e.getLeft() and
5-
e2 = e.getRight()
4+
e1 = e.getLeft() and
5+
e2 = e.getRight()
66
}
77

8-
query predicate cmdExpr(ExprStmt exprStmt, Expr e) {
9-
e = exprStmt.getExpr()
10-
}
8+
query predicate cmdExpr(ExprStmt exprStmt, Expr e) { e = exprStmt.getExpr() }
119

1210
query predicate invokeMemoryExpression(InvokeMemberExpr invoke, Expr e, int i, Expr arg) {
13-
e = invoke.getQualifier() and
14-
arg = invoke.getArgument(i)
11+
e = invoke.getQualifier() and
12+
arg = invoke.getArgument(i)
1513
}
1614

1715
query predicate expandableString(ExpandableStringExpr expandable, int i, Expr e) {
18-
e = expandable.getExpr(i)
16+
e = expandable.getExpr(i)
1917
}
18+
19+
query predicate memberExpr(MemberExpr expr, Expr e) { e = expr.getQualifier() }

0 commit comments

Comments
 (0)