From 0fc7444e324f00ac37aafb81ee59005fbff2926e Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Wed, 10 Jun 2026 22:01:32 +0200 Subject: [PATCH] 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) }