mirror of https://github.com/borgbackup/borg.git
upgrade compressed chunk: fix treatment of ObfuscateSize chunks
the inner payload of ObfuscateSize chunks are compressed chunks and need the same zlib fix and level patching as non-obfuscated compressed chunks.
This commit is contained in:
parent
72c68c49d0
commit
c5540c2dd9
|
@ -380,13 +380,18 @@ class Archiver:
|
|||
return new_item
|
||||
|
||||
def upgrade_compressed_chunk(chunk):
|
||||
def upgrade_zlib_and_level(chunk):
|
||||
if ZLIB_legacy.detect(chunk):
|
||||
ctype = ZLIB.ID
|
||||
chunk = ctype + level + chunk # get rid of the attic legacy: prepend separate type/level bytes
|
||||
else:
|
||||
ctype = chunk[0:1]
|
||||
chunk = ctype + level + chunk[2:] # keep type same, but set level
|
||||
return chunk
|
||||
|
||||
ctype = chunk[0:1]
|
||||
level = b'\xFF' # FF means unknown compression level
|
||||
if ZLIB_legacy.detect(chunk):
|
||||
ctype = ZLIB.ID
|
||||
chunk = ctype + level + chunk # get rid of the attic legacy: prepend separate type/level bytes
|
||||
else:
|
||||
ctype = chunk[0:1]
|
||||
chunk = ctype + level + chunk[2:] # keep type same, but set level
|
||||
|
||||
if ctype == ObfuscateSize.ID:
|
||||
# in older borg, we used unusual byte order
|
||||
old_header_fmt = Struct('>I')
|
||||
|
@ -395,7 +400,11 @@ class Archiver:
|
|||
size_bytes = chunk[2:2+length]
|
||||
size = old_header_fmt.unpack(size_bytes)
|
||||
size_bytes = new_header_fmt.pack(size)
|
||||
chunk = chunk[0:2] + size_bytes + chunk[2+length:]
|
||||
compressed = chunk[2+length:]
|
||||
compressed = upgrade_zlib_and_level(compressed)
|
||||
chunk = ctype + level + size_bytes + compressed
|
||||
else:
|
||||
chunk = upgrade_zlib_and_level(chunk)
|
||||
return chunk
|
||||
|
||||
dry_run = args.dry_run
|
||||
|
|
Loading…
Reference in New Issue