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") + } +}