瀏覽代碼

remove support for shake_* hashes, fixes #6082

Thomas Waldmann 3 年之前
父節點
當前提交
6226002eb0
共有 1 個文件被更改,包括 6 次插入4 次删除
  1. 6 4
      src/borg/helpers/parseformat.py

+ 6 - 4
src/borg/helpers/parseformat.py

@@ -672,7 +672,9 @@ class ArchiveFormatter(BaseFormatter):
 
 
 class ItemFormatter(BaseFormatter):
-    hash_algorithms = hashlib.algorithms_guaranteed.union({'xxh64'})
+    # we provide the hash algos from python stdlib (except shake_*) and additionally xxh64.
+    # shake_* is not provided because it uses an incompatible .digest() method to support variable length.
+    hash_algorithms = hashlib.algorithms_guaranteed.union({'xxh64'}).difference({'shake_128', 'shake_256'})
     KEY_DESCRIPTIONS = {
         'bpath': 'verbatim POSIX path, can contain any character except NUL',
         'path': 'path interpreted as text (might be missing non-text characters, see bpath)',
@@ -836,10 +838,10 @@ class ItemFormatter(BaseFormatter):
     def hash_item(self, hash_function, item):
         if 'chunks' not in item:
             return ""
-        if hash_function in hashlib.algorithms_guaranteed:
-            hash = hashlib.new(hash_function)
-        elif hash_function == 'xxh64':
+        if hash_function == 'xxh64':
             hash = self.xxh64()
+        elif hash_function in self.hash_algorithms:
+            hash = hashlib.new(hash_function)
         for data in self.archive.pipeline.fetch_many([c.id for c in item.chunks]):
             hash.update(data)
         return hash.hexdigest()