mirror of https://github.com/borgbackup/borg.git
Merge pull request #6072 from hexagonrecursion/fwdport-6064
Forward port #6064: avoid expanding path into LHS of formatting operation
This commit is contained in:
commit
13f2600fb2
|
@ -3459,6 +3459,38 @@ id: 2 / e29442 3506da 4e1ea7 / 25f62a 5a3d41 - 02
|
||||||
output = self.cmd(*args, fork=True, exit_code=2)
|
output = self.cmd(*args, fork=True, exit_code=2)
|
||||||
assert 'Attic repository detected.' in output
|
assert 'Attic repository detected.' in output
|
||||||
|
|
||||||
|
# derived from test_extract_xattrs_errors()
|
||||||
|
@pytest.mark.skipif(not xattr.XATTR_FAKEROOT, reason='xattr not supported on this system or on this version of'
|
||||||
|
'fakeroot')
|
||||||
|
def test_do_not_fail_when_percent_is_in_xattr_name(self):
|
||||||
|
"""https://github.com/borgbackup/borg/issues/6063"""
|
||||||
|
def patched_setxattr_EACCES(*args, **kwargs):
|
||||||
|
raise OSError(errno.EACCES, 'EACCES')
|
||||||
|
|
||||||
|
self.create_regular_file('file')
|
||||||
|
xattr.setxattr(b'input/file', b'user.attribute%p', b'value')
|
||||||
|
self.cmd('init', self.repository_location, '-e' 'none')
|
||||||
|
self.cmd('create', self.repository_location + '::test', 'input')
|
||||||
|
with changedir('output'):
|
||||||
|
with patch.object(xattr, 'setxattr', patched_setxattr_EACCES):
|
||||||
|
self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING)
|
||||||
|
|
||||||
|
# derived from test_extract_xattrs_errors()
|
||||||
|
@pytest.mark.skipif(not xattr.XATTR_FAKEROOT, reason='xattr not supported on this system or on this version of'
|
||||||
|
'fakeroot')
|
||||||
|
def test_do_not_fail_when_percent_is_in_file_name(self):
|
||||||
|
"""https://github.com/borgbackup/borg/issues/6063"""
|
||||||
|
def patched_setxattr_EACCES(*args, **kwargs):
|
||||||
|
raise OSError(errno.EACCES, 'EACCES')
|
||||||
|
|
||||||
|
os.makedirs(os.path.join(self.input_path, 'dir%p'))
|
||||||
|
xattr.setxattr(b'input/dir%p', b'user.attribute', b'value')
|
||||||
|
self.cmd('init', self.repository_location, '-e' 'none')
|
||||||
|
self.cmd('create', self.repository_location + '::test', 'input')
|
||||||
|
with changedir('output'):
|
||||||
|
with patch.object(xattr, 'setxattr', patched_setxattr_EACCES):
|
||||||
|
self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless('binary' in BORG_EXES, 'no borg.exe available')
|
@unittest.skipUnless('binary' in BORG_EXES, 'no borg.exe available')
|
||||||
class ArchiverTestCaseBinary(ArchiverTestCase):
|
class ArchiverTestCaseBinary(ArchiverTestCase):
|
||||||
|
|
|
@ -132,7 +132,6 @@ def set_all(path, xattrs, follow_symlinks=False):
|
||||||
path_str = '<FD %d>' % path
|
path_str = '<FD %d>' % path
|
||||||
else:
|
else:
|
||||||
path_str = os.fsdecode(path)
|
path_str = os.fsdecode(path)
|
||||||
msg_format = '%s: when setting extended attribute %s: %%s' % (path_str, k_str)
|
|
||||||
if e.errno == errno.E2BIG:
|
if e.errno == errno.E2BIG:
|
||||||
err_str = 'too big for this filesystem'
|
err_str = 'too big for this filesystem'
|
||||||
elif e.errno == errno.ENOTSUP:
|
elif e.errno == errno.ENOTSUP:
|
||||||
|
@ -146,5 +145,5 @@ def set_all(path, xattrs, follow_symlinks=False):
|
||||||
# EACCES: permission denied to set this specific xattr (this may happen related to security.* keys)
|
# EACCES: permission denied to set this specific xattr (this may happen related to security.* keys)
|
||||||
# EPERM: operation not permitted
|
# EPERM: operation not permitted
|
||||||
err_str = os.strerror(e.errno)
|
err_str = os.strerror(e.errno)
|
||||||
logger.warning(msg_format % err_str)
|
logger.warning('%s: when setting extended attribute %s: %s', path_str, k_str, err_str)
|
||||||
return warning
|
return warning
|
||||||
|
|
Loading…
Reference in New Issue