Merge pull request #433 from hashicorp/pselle/marked-for

Return an error for invalid for expressions with marks
This commit is contained in:
Pam Selle 2020-12-17 10:34:09 -05:00 committed by GitHub
commit d0b4a6862d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 1 deletions

View File

@ -1188,6 +1188,19 @@ func (e *ForExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {
continue
}
if key.IsMarked() {
diags = append(diags, &hcl.Diagnostic{
Severity: hcl.DiagError,
Summary: "Invalid object key",
Detail: "Marked values cannot be used as object keys.",
Subject: e.KeyExpr.Range().Ptr(),
Context: &e.SrcRange,
Expression: e.KeyExpr,
EvalContext: childCtx,
})
continue
}
val, valDiags := e.ValExpr.Value(childCtx)
diags = append(diags, valDiags...)

View File

@ -902,7 +902,37 @@ upper(
}).Mark("sensitive"),
0,
},
{ // Marked map member carries marks through
`{for k, v in things: k => !v}`,
&hcl.EvalContext{
Variables: map[string]cty.Value{
"things": cty.MapVal(map[string]cty.Value{
"a": cty.True.Mark("sensitive"),
"b": cty.False,
}),
},
},
cty.ObjectVal(map[string]cty.Value{
"a": cty.False.Mark("sensitive"),
"b": cty.True,
}),
0,
},
{ // Error when using marked value as object key
`{for v in things: v => "${v}-friend"}`,
&hcl.EvalContext{
Variables: map[string]cty.Value{
"things": cty.MapVal(map[string]cty.Value{
"a": cty.StringVal("rosie").Mark("sensitive"),
"b": cty.StringVal("robin"),
}),
},
},
cty.ObjectVal(map[string]cty.Value{
"robin": cty.StringVal("robin-friend"),
}),
1,
},
{
`[{name: "Steve"}, {name: "Ermintrude"}].*.name`,
nil,