Skip to content

Commit bdbc253

Browse files
committed
feat: Update resolution support and tests
1 parent 90ced25 commit bdbc253

File tree

7 files changed

+57
-6
lines changed

7 files changed

+57
-6
lines changed

ql/lib/codeql/bicep/ast/Expr.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,16 @@ final class LambdaExpression extends Expr instanceof LambdaExpressionImpl { }
5959
* A MemberExpression expression in the AST.
6060
*/
6161
class MemberExpression extends Expr instanceof MemberExpressionImpl {
62-
Object getObject() { result = super.getObject() }
6362

64-
Idents getProperty() { result = super.getProperty() }
63+
/**
64+
* The namespace of the member expression.
65+
*/
66+
Expr getNamespace() { result = MemberExpressionImpl.super.getObject() }
67+
68+
/**
69+
* The member of the member expression.
70+
*/
71+
Idents getName() { result = MemberExpressionImpl.super.getProperty() }
6572
}
6673

6774
/**

ql/lib/codeql/bicep/ast/Resources.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Resource resolveResource(Expr expr) {
6565
// {resource.id}.id
6666
exists(MemberExpr memexpr |
6767
memexpr = expr.(Object).getProperty("id") and
68-
memexpr.getProperty().getName() = resource.getIdentifier().getName()
68+
memexpr.getNamespace().(Idents).getName() = resource.getIdentifier().getName()
6969
|
7070
result = TResourceDeclaration(resource)
7171
)
@@ -93,6 +93,8 @@ class Resource extends TResource {
9393
result = resource.getProperty(name)
9494
}
9595

96+
Resource getParent() { result = resolveResource(this.getProperty("parent")) }
97+
9698
string toString() { result = resource.toString() }
9799

98100
string getAPrimaryQlClass() { result = "Resource" }

ql/lib/codeql/bicep/ast/internal/MemberExpression.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ private import AstNodes
88
private import TreeSitter
99
private import codeql.bicep.ast.AstNodes
1010
private import Expr
11-
private import Object
1211
private import PropertyIdentifier
1312

1413
/**
@@ -23,7 +22,7 @@ class MemberExpressionImpl extends TMemberExpression, ExprImpl {
2322

2423
override string toString() { result = ast.toString() }
2524

26-
ObjectImpl getObject() { toTreeSitter(result) = ast.getObject() }
25+
ExprImpl getObject() { toTreeSitter(result) = ast.getObject() }
2726

2827
PropertyIdentifierImpl getProperty() { toTreeSitter(result) = ast.getProperty() }
2928
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
resolveIdentifier
2+
| sample.bicep:1:1:3:1 | VirtualNetworks Resource | sample.bicep:5:1:8:1 | ResourceDeclaration |
3+
resolveResource
4+
| sample.bicep:15:1:28:1 | VirtualMachines Resource | sample.bicep:10:1:13:1 | NetworkInterfaces Resource |
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import bicep
2+
3+
query predicate resolveIdentifier(Network::VirtualNetworks vn, Network::VirtualNetworkSubnets vns) {
4+
vns.getParent() = vn
5+
}
6+
7+
query predicate resolveResource(Compute::VirtualMachines vm, Network::NetworkInterfaces ni) {
8+
ni = vm.getNetworkInterfaces()
9+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
resource vnet 'Microsoft.Network/virtualNetworks@2021-02-01' = {
2+
name: 'vnet'
3+
}
4+
5+
resource existingSubnet 'Microsoft.Network/virtualNetworks/subnets@2021-02-01' = {
6+
parent: vnet
7+
name: 'subnet'
8+
}
9+
10+
resource nic 'Microsoft.Network/networkInterfaces@2021-05-01' = {
11+
name: '${name}-nic-${env}'
12+
location: location
13+
}
14+
15+
resource linuxVm 'Microsoft.Compute/virtualMachines@2020-06-01' = {
16+
name: '${name}-linux-${env}'
17+
location: location
18+
19+
properties: {
20+
networkProfile: {
21+
networkInterfaces: [
22+
{
23+
id: nic.id
24+
}
25+
]
26+
}
27+
}
28+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
| http-traffic.bicep:35:31:35:35 | false | Supports non-HTTPS traffic for storage accounts. |
1+
| http-traffic.bicep:35:31:35:35 | false | Supports non-HTTPS traffic for storage accounts. |
2+
| http-traffic.bicep:35:31:35:35 | false | Supports non-HTTPS traffic for storage accounts. |
3+
| http-traffic.bicep:35:31:35:35 | false | Supports non-HTTPS traffic for storage accounts. |

0 commit comments

Comments
 (0)