Merge pull request #8102 from ThomasWaldmann/error-msg-bad-nonce-file-master

give clean error msg for invalid nonce file, see #7967
This commit is contained in:
TW 2024-02-18 15:21:52 +01:00 committed by GitHub
commit 3bfd7652cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 5 deletions

View File

@ -25,7 +25,7 @@ from .fs import O_, flags_dir, flags_special_follow, flags_special, flags_base,
from .fs import HardLinkManager
from .misc import sysinfo, log_multi, consume
from .misc import ChunkIteratorFileWrapper, open_item, chunkit, iter_separated, ErrorIgnoringTextIOWrapper
from .parseformat import bin_to_hex, safe_encode, safe_decode
from .parseformat import bin_to_hex, hex_to_bin, safe_encode, safe_decode
from .parseformat import text_to_json, binary_to_json, remove_surrogates, join_cmd
from .parseformat import eval_escapes, decode_dict, positive_int_validator, interval
from .parseformat import PathSpec, SortBySpec, ChunkerParams, FilesCacheMode, partial_format, DatetimeWrapper

View File

@ -1,6 +1,7 @@
import abc
import argparse
import base64
import binascii
import hashlib
import json
import os
@ -10,7 +11,6 @@ import shlex
import stat
import uuid
from typing import Dict, Set, Tuple, ClassVar, Any, TYPE_CHECKING, Literal
from binascii import hexlify
from collections import Counter, OrderedDict
from datetime import datetime, timezone
from functools import partial
@ -33,7 +33,18 @@ if TYPE_CHECKING:
def bin_to_hex(binary):
return hexlify(binary).decode("ascii")
return binascii.hexlify(binary).decode("ascii")
def hex_to_bin(hex, length=None):
try:
binary = binascii.unhexlify(hex)
binary_len = len(binary)
if length is not None and binary_len != length:
raise ValueError(f"Expected {length} bytes ({2 * length} hex digits), got {binary_len} bytes.")
except binascii.Error as e:
raise ValueError(str(e)) from None
return binary
def safe_decode(s, coding="utf-8", errors="surrogateescape"):

View File

@ -21,7 +21,7 @@ import borg.logger
from . import __version__
from .compress import Compressor
from .constants import * # NOQA
from .helpers import Error, IntegrityError
from .helpers import Error, ErrorWithTraceback, IntegrityError
from .helpers import bin_to_hex
from .helpers import get_limited_unpacker
from .helpers import replace_placeholders
@ -766,7 +766,11 @@ class RemoteRepository:
error = unpacked["exception_class"]
args = unpacked["exception_args"]
if error == "DoesNotExist":
if error == "Error":
raise Error(args[0])
elif error == "ErrorWithTraceback":
raise ErrorWithTraceback(args[0])
elif error == "DoesNotExist":
raise Repository.DoesNotExist(self.location.processed)
elif error == "AlreadyExists":
raise Repository.AlreadyExists(self.location.processed)