From 0fc7444e324f00ac37aafb81ee59005fbff2926e Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Wed, 10 Jun 2026 22:01:32 +0200 Subject: [PATCH 1/2] repository: fix zero-sized blobs in v2 repos --- internal/repository/repository.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/repository/repository.go b/internal/repository/repository.go index 86eab8183..3e0ae33c3 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -380,11 +380,13 @@ func (r *Repository) saveAndEncrypt(ctx context.Context, t restic.BlobType, data uncompressedLength := 0 if r.cfg.Version > 1 { - // we have a repo v2, so compression is available. if the user opts to // not compress, we won't compress any data, but everything else is // compressed. - if r.opts.Compression != CompressionOff || t != restic.DataBlob { + // uncompressedLength != 0 is used to indicate compressed data. Thus, a zero-sized blob + // cannot be compressed. This special case is only relevant for tests, normal operation does not + // generate zero-sized blobs. + if len(data) > 0 && (r.opts.Compression != CompressionOff || t != restic.DataBlob) { uncompressedLength = len(data) data = r.getZstdEncoder().EncodeAll(data, nil) } From 5683180a3b6d3e3a08683b330b6e98914d813b7b Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Wed, 10 Jun 2026 22:03:56 +0200 Subject: [PATCH 2/2] upgrade compress library --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a4b9584c6..00e1171de 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/go-ole/go-ole v1.3.0 github.com/google/go-cmp v0.7.0 github.com/hashicorp/golang-lru/v2 v2.0.7 - github.com/klauspost/compress v1.18.4 + github.com/klauspost/compress v1.18.6 github.com/minio/minio-go/v7 v7.1.0 github.com/ncw/swift/v2 v2.0.5 github.com/peterbourgon/unixtransport v0.0.7 diff --git a/go.sum b/go.sum index 93a347a04..aa573603e 100644 --- a/go.sum +++ b/go.sum @@ -131,8 +131,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.11 h1:0OwqZRYI2rFrjS4kvkDnqJkKHdHaRnCm68/DY4OxRzU= github.com/klauspost/cpuid/v2 v2.2.11/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=