From 5b4c559d4dcdc42bf2acef179d3e83590a6c79b6 Mon Sep 17 00:00:00 2001 From: Aithal Date: Mon, 22 May 2017 13:09:19 -0700 Subject: [PATCH] pkg/types: safer typecasting for TextUnmarshaler when loading args types.LoadArgs does an unsafe typecast for env args key value pairs. This can cause a panic if the config type fields do not implement the encoding.TextUnmarshaler interface. This commit modifies it to do a safe type cast and return an error in such scenarios. --- pkg/types/args.go | 7 +++++-- pkg/types/args_test.go | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/types/args.go b/pkg/types/args.go index 66dcf9e..e87c6b6 100644 --- a/pkg/types/args.go +++ b/pkg/types/args.go @@ -85,8 +85,11 @@ func LoadArgs(args string, container interface{}) error { unknownArgs = append(unknownArgs, pair) continue } - - u := keyField.Addr().Interface().(encoding.TextUnmarshaler) + keyFieldIface := keyField.Addr().Interface() + u, ok := keyFieldIface.(encoding.TextUnmarshaler) + if !ok { + return fmt.Errorf("ARGS: '%s' cannot be unmarshalled from textual form for pair %q", keyField, pair) + } err := u.UnmarshalText([]byte(valueString)) if err != nil { return fmt.Errorf("ARGS: error parsing value of pair %q: %v)", pair, err) diff --git a/pkg/types/args_test.go b/pkg/types/args_test.go index 3a53d9a..23772ca 100644 --- a/pkg/types/args_test.go +++ b/pkg/types/args_test.go @@ -118,4 +118,15 @@ var _ = Describe("LoadArgs", func() { Expect(err).NotTo(HaveOccurred()) }) }) + + Context("When known arguments are passed and cannot be unmarshalled", func() { + It("LoadArgs should fail", func() { + conf := struct { + IP IPNet + }{} + err := LoadArgs("IP=10.0.0.0/24", &conf) + Expect(err).To(HaveOccurred()) + + }) + }) }) -- 2.44.0