Merge pull request #24277 from hashicorp/alisdair/fix-non-string-map-key-panics
lang: Fix non-string key panics in map function
This commit is contained in:
commit
29c0cb79a1
|
@ -346,12 +346,14 @@ var MapFunc = function.New(&function.Spec{
|
|||
|
||||
for i := 0; i < len(args); i += 2 {
|
||||
|
||||
key := args[i].AsString()
|
||||
|
||||
err := gocty.FromCtyValue(args[i], &key)
|
||||
keyVal, err := convert.Convert(args[i], cty.String)
|
||||
if err != nil {
|
||||
return cty.NilVal, err
|
||||
}
|
||||
if keyVal.IsNull() {
|
||||
return cty.NilVal, fmt.Errorf("argument %d is a null key", i+1)
|
||||
}
|
||||
key := keyVal.AsString()
|
||||
|
||||
val := args[i+1]
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
"github.com/zclconf/go-cty/cty/function"
|
||||
)
|
||||
|
||||
func TestLength(t *testing.T) {
|
||||
|
@ -730,6 +731,19 @@ func TestMap(t *testing.T) {
|
|||
}),
|
||||
false,
|
||||
},
|
||||
{ // convert number keys to strings
|
||||
[]cty.Value{
|
||||
cty.NumberIntVal(1),
|
||||
cty.StringVal("hello"),
|
||||
cty.NumberIntVal(2),
|
||||
cty.StringVal("goodbye"),
|
||||
},
|
||||
cty.MapVal(map[string]cty.Value{
|
||||
"1": cty.StringVal("hello"),
|
||||
"2": cty.StringVal("goodbye"),
|
||||
}),
|
||||
false,
|
||||
},
|
||||
{ // map of lists is okay
|
||||
[]cty.Value{
|
||||
cty.StringVal("hello"),
|
||||
|
@ -785,6 +799,14 @@ func TestMap(t *testing.T) {
|
|||
cty.NilVal,
|
||||
true,
|
||||
},
|
||||
{ // null key returns an error
|
||||
[]cty.Value{
|
||||
cty.NullVal(cty.DynamicPseudoType),
|
||||
cty.NumberIntVal(5),
|
||||
},
|
||||
cty.NilVal,
|
||||
true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
@ -794,6 +816,9 @@ func TestMap(t *testing.T) {
|
|||
if err == nil {
|
||||
t.Fatal("succeeded; want error")
|
||||
}
|
||||
if _, ok := err.(function.PanicError); ok {
|
||||
t.Fatalf("unexpected panic: %s", err)
|
||||
}
|
||||
return
|
||||
} else if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
|
|
Loading…
Reference in New Issue