1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-03-01 01:06:59 +00:00

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 HardLinkManager from .fs import HardLinkManager
from .misc import sysinfo, log_multi, consume from .misc import sysinfo, log_multi, consume
from .misc import ChunkIteratorFileWrapper, open_item, chunkit, iter_separated, ErrorIgnoringTextIOWrapper 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 text_to_json, binary_to_json, remove_surrogates, join_cmd
from .parseformat import eval_escapes, decode_dict, positive_int_validator, interval from .parseformat import eval_escapes, decode_dict, positive_int_validator, interval
from .parseformat import PathSpec, SortBySpec, ChunkerParams, FilesCacheMode, partial_format, DatetimeWrapper from .parseformat import PathSpec, SortBySpec, ChunkerParams, FilesCacheMode, partial_format, DatetimeWrapper

View file

@ -1,6 +1,7 @@
import abc import abc
import argparse import argparse
import base64 import base64
import binascii
import hashlib import hashlib
import json import json
import os import os
@ -10,7 +11,6 @@
import stat import stat
import uuid import uuid
from typing import Dict, Set, Tuple, ClassVar, Any, TYPE_CHECKING, Literal from typing import Dict, Set, Tuple, ClassVar, Any, TYPE_CHECKING, Literal
from binascii import hexlify
from collections import Counter, OrderedDict from collections import Counter, OrderedDict
from datetime import datetime, timezone from datetime import datetime, timezone
from functools import partial from functools import partial
@ -33,7 +33,18 @@
def bin_to_hex(binary): 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"): def safe_decode(s, coding="utf-8", errors="surrogateescape"):

View file

@ -21,7 +21,7 @@
from . import __version__ from . import __version__
from .compress import Compressor from .compress import Compressor
from .constants import * # NOQA from .constants import * # NOQA
from .helpers import Error, IntegrityError from .helpers import Error, ErrorWithTraceback, IntegrityError
from .helpers import bin_to_hex from .helpers import bin_to_hex
from .helpers import get_limited_unpacker from .helpers import get_limited_unpacker
from .helpers import replace_placeholders from .helpers import replace_placeholders
@ -766,7 +766,11 @@ def handle_error(unpacked):
error = unpacked["exception_class"] error = unpacked["exception_class"]
args = unpacked["exception_args"] 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) raise Repository.DoesNotExist(self.location.processed)
elif error == "AlreadyExists": elif error == "AlreadyExists":
raise Repository.AlreadyExists(self.location.processed) raise Repository.AlreadyExists(self.location.processed)