mirror of
https://github.com/borgbackup/borg.git
synced 2025-02-23 22:51:35 +00:00
fix Traceback when running check --repair, attic issue #232
This fix is maybe not perfect yet, but maybe better than nothing. A comment by Ernest0x (see https://github.com/jborg/attic/issues/232 ): @ThomasWaldmann your patch did the job. attic check --repair did the repairing and attic delete deleted the archive. Thanks. That said, however, I am not sure if the best place to put the check is where you put it in the patch. For example, the check operation uses a custom msgpack unpacker class named "RobustUnpacker", which it does try to check for correct format (see the comment: "Abort early if the data does not look like a serialized dict"), but it seems it does not catch my case. The relevant code in 'cache.py', on the other hand, uses msgpack's Unpacker class.
This commit is contained in:
parent
9b9c808713
commit
e4a41c8981
2 changed files with 7 additions and 0 deletions
|
@ -755,6 +755,10 @@ def missing_chunk_detector(chunk_id):
|
|||
for chunk_id, cdata in zip(items, repository.get_many(items)):
|
||||
unpacker.feed(self.key.decrypt(chunk_id, cdata))
|
||||
for item in unpacker:
|
||||
if not isinstance(item, dict):
|
||||
self.report_progress('Did not get expected metadata dict - archive corrupted!',
|
||||
error=True)
|
||||
continue
|
||||
yield item
|
||||
|
||||
repository = cache_if_remote(self.repository)
|
||||
|
|
|
@ -287,6 +287,9 @@ def fetch_and_build_idx(archive_id, repository, key, tmp_dir, tf_out):
|
|||
add(chunk_idx, item_id, len(data), len(chunk))
|
||||
unpacker.feed(data)
|
||||
for item in unpacker:
|
||||
if not isinstance(item, dict):
|
||||
print('Error: Did not get expected metadata dict - archive corrupted!')
|
||||
continue
|
||||
if b'chunks' in item:
|
||||
for chunk_id, size, csize in item[b'chunks']:
|
||||
add(chunk_idx, chunk_id, size, csize)
|
||||
|
|
Loading…
Reference in a new issue