narrow: stricter validation of narrowspec patterns
While we're at it, forbid empty path components (aka repeated slashes) as well
because they can cause problems (at the very least a crash failing HgPath
validation in rust code path).
--- a/mercurial/narrowspec.py Fri Jan 10 12:40:42 2025 +0000
+++ b/mercurial/narrowspec.py Fri Jan 10 16:14:40 2025 +0000
@@ -84,6 +84,11 @@
_(b'"." and ".." are not allowed in narrowspec paths')
)
+ if pat != b'' and b'' in components:
+ raise error.Abort(
+ _(b'empty path components are not allowed in narrowspec paths')
+ )
+
def normalizepattern(pattern, defaultkind=b'path'):
"""Returns the normalized version of a text-format pattern.
--- a/tests/test-narrow.t Fri Jan 10 12:40:42 2025 +0000
+++ b/tests/test-narrow.t Fri Jan 10 16:14:40 2025 +0000
@@ -62,6 +62,9 @@
$ hg clone --narrow ssh://user@dummy/master foo --include ' '
abort: leading or trailing whitespace is not allowed in narrowspec paths
[255]
+ $ hg clone --narrow ssh://user@dummy/master foo --include 'a//c'
+ abort: empty path components are not allowed in narrowspec paths
+ [255]
Names with '.' in them are OK.
$ hg clone --narrow ./master should-work --include a/.b/c