helper/kv-builder: blank values should not panic

This commit is contained in:
Mitchell Hashimoto
2015-06-16 10:00:02 -07:00
parent 61f7c098f7
commit 4502bb71b8
2 changed files with 25 additions and 22 deletions

View File

@@ -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

View File

@@ -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) {