From efe42e9182dbc17339ba89a37bfd86c9cdbf7ba1 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Wed, 18 Dec 2019 14:17:48 -0800 Subject: [PATCH] Allocate map when out points to nil map Kubernetes-commit: 53080bda9c95db33227b02b5b7df7e7737a2904e --- tools/clientcmd/api/v1/conversion.go | 12 ++++++++++++ tools/clientcmd/loader_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/tools/clientcmd/api/v1/conversion.go b/tools/clientcmd/api/v1/conversion.go index 0d27672e..c38ebc07 100644 --- a/tools/clientcmd/api/v1/conversion.go +++ b/tools/clientcmd/api/v1/conversion.go @@ -31,6 +31,9 @@ func Convert_Slice_v1_NamedCluster_To_Map_string_To_Pointer_api_Cluster(in *[]Na if err := Convert_v1_Cluster_To_api_Cluster(&curr.Cluster, newCluster, s); err != nil { return err } + if *out == nil { + *out = make(map[string]*api.Cluster) + } if (*out)[curr.Name] == nil { (*out)[curr.Name] = newCluster } else { @@ -65,6 +68,9 @@ func Convert_Slice_v1_NamedAuthInfo_To_Map_string_To_Pointer_api_AuthInfo(in *[] if err := Convert_v1_AuthInfo_To_api_AuthInfo(&curr.AuthInfo, newAuthInfo, s); err != nil { return err } + if *out == nil { + *out = make(map[string]*api.AuthInfo) + } if (*out)[curr.Name] == nil { (*out)[curr.Name] = newAuthInfo } else { @@ -99,6 +105,9 @@ func Convert_Slice_v1_NamedContext_To_Map_string_To_Pointer_api_Context(in *[]Na if err := Convert_v1_Context_To_api_Context(&curr.Context, newContext, s); err != nil { return err } + if *out == nil { + *out = make(map[string]*api.Context) + } if (*out)[curr.Name] == nil { (*out)[curr.Name] = newContext } else { @@ -133,6 +142,9 @@ func Convert_Slice_v1_NamedExtension_To_Map_string_To_runtime_Object(in *[]Named if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&curr.Extension, &newExtension, s); err != nil { return err } + if *out == nil { + *out = make(map[string]runtime.Object) + } if (*out)[curr.Name] == nil { (*out)[curr.Name] = newExtension } else { diff --git a/tools/clientcmd/loader_test.go b/tools/clientcmd/loader_test.go index f38a92b7..e5f09c20 100644 --- a/tools/clientcmd/loader_test.go +++ b/tools/clientcmd/loader_test.go @@ -80,6 +80,32 @@ var ( } ) +func TestNilOutMap(t *testing.T) { + var fakeKubeconfigData = `apiVersion: v1 +kind: Config +clusters: +- cluster: + certificate-authority-data: UEhPTlkK + server: https://1.1.1.1 + name: production +contexts: +- context: + cluster: production + user: production + name: production +current-context: production +users: +- name: production + user: + auth-provider: + name: gcp` + + _, _, err := clientcmdlatest.Codec.Decode([]byte(fakeKubeconfigData), nil, nil) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + func TestNonExistentCommandLineFile(t *testing.T) { loadingRules := ClientConfigLoadingRules{ ExplicitPath: "bogus_file",