From 4502bb71b852e4a57ce7d71ab5d888c3061338ef Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 16 Jun 2015 10:00:02 -0700 Subject: [PATCH] helper/kv-builder: blank values should not panic --- helper/kv-builder/builder.go | 44 ++++++++++++++++--------------- helper/kv-builder/builder_test.go | 3 ++- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/helper/kv-builder/builder.go b/helper/kv-builder/builder.go index 767cff4b1c..f83eaf6c2d 100644 --- a/helper/kv-builder/builder.go +++ b/helper/kv-builder/builder.go @@ -78,30 +78,32 @@ func (b *Builder) add(raw string) error { } key, value := parts[0], parts[1] - if len(value) > 0 && value[0] == '@' { - contents, err := ioutil.ReadFile(value[1:]) - if err != nil { - return fmt.Errorf("error reading file: %s", err) - } + if len(value) > 0 { + if value[0] == '@' { + contents, err := ioutil.ReadFile(value[1:]) + if err != nil { + return fmt.Errorf("error reading file: %s", err) + } - value = string(contents) - } else if value[0] == '\\' && value[1] == '@' { - value = value[1:] - } else if value == "-" { - if b.Stdin == nil { - return fmt.Errorf("stdin is not supported") - } - if b.stdin { - return fmt.Errorf("stdin already consumed") - } - b.stdin = true + value = string(contents) + } else if value[0] == '\\' && value[1] == '@' { + value = value[1:] + } else if value == "-" { + if b.Stdin == nil { + return fmt.Errorf("stdin is not supported") + } + if b.stdin { + return fmt.Errorf("stdin already consumed") + } + b.stdin = true - var buf bytes.Buffer - if _, err := io.Copy(&buf, b.Stdin); err != nil { - return err - } + var buf bytes.Buffer + if _, err := io.Copy(&buf, b.Stdin); err != nil { + return err + } - value = buf.String() + value = buf.String() + } } b.result[key] = value diff --git a/helper/kv-builder/builder_test.go b/helper/kv-builder/builder_test.go index 90e892969a..f64c8e46e2 100644 --- a/helper/kv-builder/builder_test.go +++ b/helper/kv-builder/builder_test.go @@ -8,7 +8,7 @@ import ( func TestBuilder_basic(t *testing.T) { var b Builder - err := b.Add("foo=bar", "bar=baz") + err := b.Add("foo=bar", "bar=baz", "baz=") if err != nil { t.Fatalf("err: %s", err) } @@ -16,6 +16,7 @@ func TestBuilder_basic(t *testing.T) { expected := map[string]interface{}{ "foo": "bar", "bar": "baz", + "baz": "", } actual := b.Map() if !reflect.DeepEqual(actual, expected) {