From c227eb4f81abeeb19b225f65faa54047ec265de9 Mon Sep 17 00:00:00 2001 From: Pam Selle Date: Tue, 15 Dec 2020 16:07:30 -0500 Subject: [PATCH] Error if attempting to use marked value as key When evaluating an HCL expression attempting to use a marked value as an object key, return an error rather than falling through to the cty panic. The error style mimics similar errors in the area. --- hclsyntax/expression.go | 13 +++++++++++++ hclsyntax/expression_test.go | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/hclsyntax/expression.go b/hclsyntax/expression.go index e995110..ebf326a 100644 --- a/hclsyntax/expression.go +++ b/hclsyntax/expression.go @@ -825,6 +825,19 @@ func (e *ObjectConsExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics continue } + if key.IsMarked() { + diags = append(diags, &hcl.Diagnostic{ + Severity: hcl.DiagError, + Summary: "Marked value as key", + Detail: "Can't use a marked value as a key.", + Subject: item.ValueExpr.Range().Ptr(), + Expression: item.KeyExpr, + EvalContext: ctx, + }) + known = false + continue + } + var err error key, err = convert.Convert(key, cty.String) if err != nil { diff --git a/hclsyntax/expression_test.go b/hclsyntax/expression_test.go index 1fd4f51..f63982c 100644 --- a/hclsyntax/expression_test.go +++ b/hclsyntax/expression_test.go @@ -506,6 +506,19 @@ upper( }), 0, }, + { + // Marked values as object keys + `{(var.greeting) = "world", "goodbye" = "earth"}`, + &hcl.EvalContext{ + Variables: map[string]cty.Value{ + "var": cty.ObjectVal(map[string]cty.Value{ + "greeting": cty.StringVal("hello").Mark("marked"), + }), + }, + }, + cty.DynamicVal, + 1, + }, { `{"${var.greeting}" = "world"}`, &hcl.EvalContext{