Enable path validation for copy, rename, debugwalk and other canonpath users.
authorThomas Arendsen Hein <thomas@intevation.de>
Sun, 19 Mar 2006 14:53:58 +0100
changeset 1976 df8416346bb7
parent 1975 6e1a8ea5d717
child 1977 7eb694a1c1af
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.
mercurial/util.py
tests/test-rename
tests/test-rename.out
tests/test-walk
tests/test-walk.out
--- 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