mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
opener: forbid paths ending with directory separator (issue2507)
If Linux is asked to open a filename with a trailing directory separator, e.g. "foo/", the open fails with EISDIR. On AIX, the open succeeds, opening file "foo". This causes test-mq-qnew to fail on AIX. Fix by adding 'ends with directory separator' to the conditions checked by the path auditor. Change test to expect auditor fail message.
This commit is contained in:
parent
4655fb606c
commit
e572ae4bd8
@ -487,6 +487,7 @@ class path_auditor(object):
|
||||
'''ensure that a filesystem path contains no banned components.
|
||||
the following properties of a path are checked:
|
||||
|
||||
- ends with a directory separator
|
||||
- under top-level .hg
|
||||
- starts at the root of a windows drive
|
||||
- contains ".."
|
||||
@ -504,6 +505,9 @@ class path_auditor(object):
|
||||
def __call__(self, path):
|
||||
if path in self.audited:
|
||||
return
|
||||
# AIX ignores "/" at end of path, others raise EISDIR.
|
||||
if endswithsep(path):
|
||||
raise Abort(_("path ends in directory separator: %s") % path)
|
||||
normpath = os.path.normcase(path)
|
||||
parts = splitpath(normpath)
|
||||
if (os.path.splitdrive(path)[0]
|
||||
|
@ -107,7 +107,7 @@ plain headers
|
||||
abort: "foo#bar" cannot be used as the name of a patch
|
||||
abort: "foo:bar" cannot be used as the name of a patch
|
||||
% qnew with name containing slash
|
||||
abort: cannot write patch "foo/": (Is a|No such file or) directory (re)
|
||||
abort: path ends in directory separator: foo/
|
||||
abort: "foo" already exists as a directory
|
||||
foo/bar.patch
|
||||
popping foo/bar.patch
|
||||
@ -172,7 +172,7 @@ hg headers
|
||||
abort: "foo#bar" cannot be used as the name of a patch
|
||||
abort: "foo:bar" cannot be used as the name of a patch
|
||||
% qnew with name containing slash
|
||||
abort: cannot write patch "foo/": (Is a|No such file or) directory (re)
|
||||
abort: path ends in directory separator: foo/
|
||||
abort: "foo" already exists as a directory
|
||||
foo/bar.patch
|
||||
popping foo/bar.patch
|
||||
|
Loading…
Reference in New Issue
Block a user