From 895daabf1761917f35869dd79d326960f3d52cc7 Mon Sep 17 00:00:00 2001 From: Chris Capurso <1036769+ccapurso@users.noreply.github.com> Date: Tue, 15 Mar 2022 23:30:28 -0400 Subject: [PATCH] fix kv builder out of bounds panic on single backslash (#35) --- kv-builder/builder.go | 2 +- kv-builder/builder_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/kv-builder/builder.go b/kv-builder/builder.go index f2bfa2c..dc75731 100644 --- a/kv-builder/builder.go +++ b/kv-builder/builder.go @@ -91,7 +91,7 @@ func (b *Builder) add(raw string) error { } value = string(contents) - } else if value[0] == '\\' && value[1] == '@' { + } else if len(value) >= 2 && value[0] == '\\' && value[1] == '@' { value = value[1:] } else if value == "-" { if b.Stdin == nil { diff --git a/kv-builder/builder_test.go b/kv-builder/builder_test.go index 46b4d05..ea08baa 100644 --- a/kv-builder/builder_test.go +++ b/kv-builder/builder_test.go @@ -41,6 +41,23 @@ func TestBuilder_escapedAt(t *testing.T) { } } +func TestBuilder_singleBackslash(t *testing.T) { + var b Builder + err := b.Add("foo=bar", "bar=\\") + if err != nil { + t.Fatalf("err: %s", err) + } + + expected := map[string]interface{}{ + "foo": "bar", + "bar": "\\", + } + actual := b.Map() + if !reflect.DeepEqual(actual, expected) { + t.Fatalf("bad: %#v", actual) + } +} + func TestBuilder_stdin(t *testing.T) { var b Builder b.Stdin = bytes.NewBufferString("baz")