diff --git a/borg/archive.py b/borg/archive.py index 886060d1d..a133af7bb 100644 --- a/borg/archive.py +++ b/borg/archive.py @@ -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) diff --git a/borg/cache.py b/borg/cache.py index 1b66bc1b9..d64cdfb14 100644 --- a/borg/cache.py +++ b/borg/cache.py @@ -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)