xattr: ignore empty names returned by llistxattr(2) et al

This commit is contained in:
Marian Beermann 2017-01-03 12:47:42 +01:00
parent 60d33b838f
commit 85e79f96a1
2 changed files with 10 additions and 3 deletions

View File

@ -205,7 +205,7 @@ if sys.platform.startswith('linux'): # pragma: linux only
n, buf = _listxattr_inner(func, path)
return [os.fsdecode(name) for name in split_string0(buf[:n])
if not name.startswith(b'system.posix_acl_')]
if name and not name.startswith(b'system.posix_acl_')]
def getxattr(path, name, *, follow_symlinks=True):
def func(path, name, buf, size):
@ -261,7 +261,7 @@ elif sys.platform == 'darwin': # pragma: darwin only
return libc.listxattr(path, buf, size, XATTR_NOFOLLOW)
n, buf = _listxattr_inner(func, path)
return [os.fsdecode(name) for name in split_string0(buf[:n])]
return [os.fsdecode(name) for name in split_string0(buf[:n]) if name]
def getxattr(path, name, *, follow_symlinks=True):
def func(path, name, buf, size):
@ -320,7 +320,7 @@ elif sys.platform.startswith('freebsd'): # pragma: freebsd only
return libc.extattr_list_link(path, ns, buf, size)
n, buf = _listxattr_inner(func, path)
return [os.fsdecode(name) for name in split_lstring(buf[:n])]
return [os.fsdecode(name) for name in split_lstring(buf[:n]) if name]
def getxattr(path, name, *, follow_symlinks=True):
def func(path, name, buf, size):

View File

@ -126,6 +126,13 @@ The best check that everything is ok is to run a dry-run extraction::
Changelog
=========
Version 1.0.10rc1 (not released yet)
------------------------------------
Bug fixes:
- Avoid triggering an ObjectiveFS bug in xattr retrieval, #1992
Version 1.0.9 (2016-12-20)
--------------------------