diff --git a/internal/repository/repository.go b/internal/repository/repository.go index 3cae7c597..c7ce46bdb 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -67,9 +67,10 @@ type CompressionMode uint // Constants for the different compression levels. const ( - CompressionAuto CompressionMode = 0 - CompressionOff CompressionMode = 1 - CompressionMax CompressionMode = 2 + CompressionAuto CompressionMode = 0 + CompressionOff CompressionMode = 1 + CompressionMax CompressionMode = 2 + CompressionInvalid CompressionMode = 3 ) // Set implements the method needed for pflag command flag parsing. @@ -82,6 +83,7 @@ func (c *CompressionMode) Set(s string) error { case "max": *c = CompressionMax default: + *c = CompressionInvalid return fmt.Errorf("invalid compression mode %q, must be one of (auto|off|max)", s) } @@ -107,6 +109,10 @@ func (c *CompressionMode) Type() string { // New returns a new repository with backend be. func New(be restic.Backend, opts Options) (*Repository, error) { + if opts.Compression == CompressionInvalid { + return nil, errors.Fatalf("invalid compression mode") + } + if opts.PackSize == 0 { opts.PackSize = DefaultPackSize } diff --git a/internal/repository/repository_test.go b/internal/repository/repository_test.go index f4be16cbc..9fd0c3765 100644 --- a/internal/repository/repository_test.go +++ b/internal/repository/repository_test.go @@ -681,3 +681,11 @@ func testStreamPack(t *testing.T, version uint) { } }) } + +func TestInvalidCompression(t *testing.T) { + var comp repository.CompressionMode + err := comp.Set("nope") + rtest.Assert(t, err != nil, "missing error") + _, err = repository.New(nil, repository.Options{Compression: comp}) + rtest.Assert(t, err != nil, "missing error") +}