Browse Source

cli: Fix panic on empty data argument to `kv put`

Passing in an empty quoted argument from the shell currently panics as
we never check the length being greater than 0 prior to indexing into
the first rune, as illustrated in the test in this commit.

We also fix the panic, treating an empty string for data as equivalent
to not having passed it in the first place.
pull/2635/head
James Nugent 8 years ago
parent
commit
ae83b71b08
  1. 5
      command/kv_put.go
  2. 28
      command/kv_put_test.go

5
command/kv_put.go

@ -236,6 +236,11 @@ func (c *KVPutCommand) dataFromArgs(args []string) (string, string, error) {
key := args[0] key := args[0]
data := args[1] data := args[1]
// Handle empty quoted shell parameters
if len(data) == 0 {
return key, "", nil
}
switch data[0] { switch data[0] {
case '@': case '@':
data, err := ioutil.ReadFile(data[1:]) data, err := ioutil.ReadFile(data[1:])

28
command/kv_put_test.go

@ -101,6 +101,34 @@ func TestKVPutCommand_Run(t *testing.T) {
} }
} }
func TestKVPutCommand_RunEmptyDataQuoted(t *testing.T) {
srv, client := testAgentWithAPIClient(t)
defer srv.Shutdown()
waitForLeader(t, srv.httpAddr)
ui := new(cli.MockUi)
c := &KVPutCommand{Ui: ui}
args := []string{
"-http-addr=" + srv.httpAddr,
"foo", "",
}
code := c.Run(args)
if code != 0 {
t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
}
data, _, err := client.KV().Get("foo", nil)
if err != nil {
t.Fatal(err)
}
if data.Value != nil {
t.Errorf("bad: %#v", data.Value)
}
}
func TestKVPutCommand_RunBase64(t *testing.T) { func TestKVPutCommand_RunBase64(t *testing.T) {
srv, client := testAgentWithAPIClient(t) srv, client := testAgentWithAPIClient(t)
defer srv.Shutdown() defer srv.Shutdown()

Loading…
Cancel
Save