From bbe0d6aa30c1103338d0f58846447465e8264007 Mon Sep 17 00:00:00 2001 From: Paul Banks Date: Fri, 23 Apr 2021 20:48:10 +0100 Subject: [PATCH] Fix panic bug in snapshot inspect (#10091) * Fix panic bug in snapshot inspect * Add changelog entry * Update .changelog/10091.txt * Undo bad GitHub UI merge * Undo bad GitHub UI merge --- .changelog/10091.txt | 3 +++ command/snapshot/inspect/snapshot_inspect.go | 1 + .../snapshot/inspect/snapshot_inspect_test.go | 19 +++++++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 .changelog/10091.txt diff --git a/.changelog/10091.txt b/.changelog/10091.txt new file mode 100644 index 000000000..fab96dee4 --- /dev/null +++ b/.changelog/10091.txt @@ -0,0 +1,3 @@ +```release-note:bug +cli: snapshot inspect command would panic on invalid input. +``` diff --git a/command/snapshot/inspect/snapshot_inspect.go b/command/snapshot/inspect/snapshot_inspect.go index a3b876426..5d9baacaa 100644 --- a/command/snapshot/inspect/snapshot_inspect.go +++ b/command/snapshot/inspect/snapshot_inspect.go @@ -139,6 +139,7 @@ func (c *cmd) Run(args []string) int { readFile, meta, err = snapshot.Read(hclog.New(nil), f) if err != nil { c.UI.Error(fmt.Sprintf("Error reading snapshot: %s", err)) + return 1 } defer func() { if err := readFile.Close(); err != nil { diff --git a/command/snapshot/inspect/snapshot_inspect_test.go b/command/snapshot/inspect/snapshot_inspect_test.go index a9a7992dd..9d4add371 100644 --- a/command/snapshot/inspect/snapshot_inspect_test.go +++ b/command/snapshot/inspect/snapshot_inspect_test.go @@ -153,10 +153,8 @@ func TestSnapshotInspectKVDetailsDepthFilterCommand(t *testing.T) { // TestSnapshotInspectCommandRaw test reading a snaphost directly from a raft // data dir. func TestSnapshotInspectCommandRaw(t *testing.T) { - filepath := "./testdata/raw/state.bin" - // Inspect the snapshot ui := cli.NewMockUi() c := New(ui) args := []string{filepath} @@ -169,3 +167,20 @@ func TestSnapshotInspectCommandRaw(t *testing.T) { want := golden(t, t.Name(), ui.OutputWriter.String()) require.Equal(t, want, ui.OutputWriter.String()) } + +func TestSnapshotInspectInvalidFile(t *testing.T) { + // Attempt to open a non-snapshot file. + filepath := "./testdata/TestSnapshotInspectCommand.golden" + + // Inspect the snapshot + ui := cli.NewMockUi() + c := New(ui) + args := []string{filepath} + + code := c.Run(args) + // Just check it was an error code returned and not a panic - originally this + // would panic. + if code == 0 { + t.Fatalf("should return an error code") + } +}