Browse Source

repo: split size check into too small and too big

also add a hint if somebody needs to restore an archive that has too big objects.
Thomas Waldmann 8 years ago
parent
commit
20392f8dd9
1 changed files with 8 additions and 3 deletions
  1. 8 3
      borg/repository.py

+ 8 - 3
borg/repository.py

@@ -712,9 +712,14 @@ class LoggedIO:
             key = None
             key = None
         else:
         else:
             raise TypeError("_read called with unsupported format")
             raise TypeError("_read called with unsupported format")
-        if size > MAX_OBJECT_SIZE or size < fmt.size:
-            raise IntegrityError('Invalid segment entry size [segment {}, offset {}]'.format(
-                segment, offset))
+        if size > MAX_OBJECT_SIZE:
+            # if you get this on an archive made with borg < 1.0.7 and millions of files and
+            # you need to restore it, you can disable this check by using "if False:" above.
+            raise IntegrityError('Invalid segment entry size {} - too big [segment {}, offset {}]'.format(
+                size, segment, offset))
+        if size < fmt.size:
+            raise IntegrityError('Invalid segment entry size {} - too small [segment {}, offset {}]'.format(
+                size, segment, offset))
         length = size - fmt.size
         length = size - fmt.size
         data = fd.read(length)
         data = fd.read(length)
         if len(data) != length:
         if len(data) != length: