From c990c9f36d28727433c7a15243cdde6a8df71e19 Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Mon, 15 Oct 2018 14:43:02 -0700 Subject: [PATCH] lang/funcs: Don't panic if coalescelist gets an unknown list --- lang/funcs/collection.go | 6 ++++++ lang/funcs/collection_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lang/funcs/collection.go b/lang/funcs/collection.go index af8008c16..d436204a4 100644 --- a/lang/funcs/collection.go +++ b/lang/funcs/collection.go @@ -147,6 +147,12 @@ var CoalesceListFunc = function.New(&function.Spec{ vals := make([]cty.Value, 0, len(args)) for _, arg := range args { + if !arg.IsKnown() { + // If we run into an unknown list at some point, we can't + // predict the final result yet. (If there's a known, non-empty + // arg before this then we won't get here.) + return cty.UnknownVal(retType), nil + } // We already know this will succeed because of the checks in our Type func above arg, _ = convert.Convert(arg, retType) diff --git a/lang/funcs/collection_test.go b/lang/funcs/collection_test.go index 42bcedf50..77783ce1d 100644 --- a/lang/funcs/collection_test.go +++ b/lang/funcs/collection_test.go @@ -355,6 +355,36 @@ func TestCoalesceList(t *testing.T) { cty.NilVal, true, }, + { // unknown list + []cty.Value{ + cty.ListVal([]cty.Value{ + cty.StringVal("third"), cty.StringVal("fourth"), + }), + cty.UnknownVal(cty.List(cty.String)), + }, + cty.ListVal([]cty.Value{ + cty.StringVal("third"), cty.StringVal("fourth"), + }), + false, + }, + { // unknown list + []cty.Value{ + cty.ListValEmpty(cty.String), + cty.UnknownVal(cty.List(cty.String)), + }, + cty.UnknownVal(cty.List(cty.String)), + false, + }, + { // unknown list + []cty.Value{ + cty.UnknownVal(cty.List(cty.String)), + cty.ListVal([]cty.Value{ + cty.StringVal("third"), cty.StringVal("fourth"), + }), + }, + cty.UnknownVal(cty.List(cty.String)), + false, + }, } for _, test := range tests {