narrow: stricter validation of narrowspec patterns stable
authorArseniy Alekseyev <aalekseyev@janestreet.com>
Fri, 10 Jan 2025 16:14:40 +0000
branchstable
changeset 52718 1c83ebf78f74
parent 52717 a7669e7b0355
child 52719 77b95a4abbb2
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).
mercurial/narrowspec.py
tests/test-narrow.t
--- 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