Enable path validation for copy, rename, debugwalk and other canonpath users.
This fixed the last bit of issue134.
Added some tests to test-rename and test-walk.
--- a/mercurial/util.py Sat Mar 18 09:51:25 2006 -0800
+++ b/mercurial/util.py Sun Mar 19 14:53:58 2006 +0100
@@ -185,7 +185,9 @@
name = os.path.join(root, cwd, name)
name = os.path.normpath(name)
if name.startswith(rootsep):
- return pconvert(name[len(rootsep):])
+ name = name[len(rootsep):]
+ audit_path(name)
+ return pconvert(name)
elif name == root:
return ''
else:
--- a/tests/test-rename Sat Mar 18 09:51:25 2006 -0800
+++ b/tests/test-rename Sun Mar 19 14:53:58 2006 +0100
@@ -179,3 +179,33 @@
hg status
hg debugstate | grep copy
hg update -C
+
+echo "# check illegal path components"
+
+hg rename d1/d11/a1 .hg/foo
+hg status
+hg rename d1/d11/a1 ../foo
+hg status
+
+mv d1/d11/a1 .hg/foo
+hg rename --after d1/d11/a1 .hg/foo
+hg status
+hg update -C
+rm .hg/foo
+
+hg rename d1/d11/a1 .hg
+hg status
+hg rename d1/d11/a1 ..
+hg status
+
+mv d1/d11/a1 .hg
+hg rename --after d1/d11/a1 .hg
+hg status
+hg update -C
+rm .hg/a1
+
+(cd d1/d11; hg rename ../../d2/b ../../.hg/foo)
+hg status
+(cd d1/d11; hg rename ../../d2/b ../../../foo)
+hg status
+
--- a/tests/test-rename.out Sat Mar 18 09:51:25 2006 -0800
+++ b/tests/test-rename.out Sun Mar 19 14:53:58 2006 +0100
@@ -254,3 +254,19 @@
R d1/b
# idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)
M d1/b
+# check illegal path components
+abort: path contains illegal component: .hg/foo
+
+abort: ../foo not under root
+abort: path contains illegal component: .hg/foo
+
+! d1/d11/a1
+abort: path contains illegal component: .hg/a1
+
+abort: ../a1 not under root
+abort: path contains illegal component: .hg/a1
+
+! d1/d11/a1
+abort: path contains illegal component: .hg/foo
+
+abort: ../../../foo not under root
--- a/tests/test-walk Sat Mar 18 09:51:25 2006 -0800
+++ b/tests/test-walk Sun Mar 19 14:53:58 2006 +0100
@@ -28,6 +28,8 @@
cd ..
hg debugwalk ../beans
hg debugwalk .
+hg debugwalk .hg
+hg debugwalk ../.hg
cd ..
hg debugwalk -Ibeans
hg debugwalk 'glob:mammals/../beans/b*'
@@ -35,6 +37,10 @@
hg debugwalk path:mammals
hg debugwalk ..
hg debugwalk beans/../..
+hg debugwalk .hg
+hg debugwalk beans/../.hg
+hg debugwalk beans/../.hg/data
+hg debugwalk beans/.hg
# Don't know how to test absolute paths without always getting a false
# error.
#hg debugwalk `pwd`/beans
--- a/tests/test-walk.out Sat Mar 18 09:51:25 2006 -0800
+++ b/tests/test-walk.out Sun Mar 19 14:53:58 2006 +0100
@@ -50,6 +50,9 @@
f mammals/Procyonidae/coatimundi Procyonidae/coatimundi
f mammals/Procyonidae/raccoon Procyonidae/raccoon
f mammals/skunk skunk
+.hg: No such file or directory
+abort: path contains illegal component: .hg
+
f beans/black beans/black
f beans/borlotti beans/borlotti
f beans/kidney beans/kidney
@@ -65,6 +68,13 @@
f mammals/skunk mammals/skunk
abort: .. not under root
abort: beans/../.. not under root
+abort: path contains illegal component: .hg
+
+abort: path contains illegal component: .hg
+
+abort: path contains illegal component: .hg/data
+
+beans/.hg: No such file or directory
f fennel fennel
f fenugreek fenugreek
f fiddlehead fiddlehead