Improved the unsafe_symlink() code to not get fooled by extra '/' chars
[rsync/rsync.git] / testsuite / unsafe-byname.test
index a4d2436..69b338f 100644 (file)
@@ -4,9 +4,14 @@
 
 # Call directly into unsafe_symlink and test its handling of various filenames
 
-. $srcdir/testsuite/rsync.fns
+. "$suitedir/rsync.fns"
 
 test_unsafe() {
+    # $1 is the target of a symlink
+    # $2 is the directory we're copying
+    # $3 is the expected outcome: "safe" if the link lies within $2,
+    # or "unsafe" otherwise
+
     result=`"$TOOLDIR/t_unsafe" "$1" "$2"` || test_fail "Failed to check $1 $2"
     if [ "$result" != "$3" ]
     then
@@ -14,29 +19,41 @@ test_unsafe() {
     fi
 }
 
-set -x
-
-test_unsafe file from safe
-test_unsafe dir/file from safe
-test_unsafe dir/./file from safe
-test_unsafe dir/. from safe
-test_unsafe dir/ from safe
-
-test_unsafe /etc/passwd                from unsafe
-test_unsafe //../etc/passwd    from unsafe
-test_unsafe //./etc/passwd     from unsafe
-
-test_unsafe ./foo              from safe
-test_unsafe ../foo             from unsafe
-test_unsafe ../dest            from/dir safe
+test_unsafe file                       from                            safe
+test_unsafe dir/file                   from                            safe
+test_unsafe dir/./file                 from                            safe
+test_unsafe dir/.                      from                            safe
+test_unsafe dir/                       from                            safe
+
+test_unsafe /etc/passwd                from                            unsafe
+test_unsafe //../etc/passwd            from                            unsafe
+test_unsafe //./etc/passwd             from                            unsafe
+
+test_unsafe ./foo                      from                            safe
+test_unsafe ../foo                     from                            unsafe
+test_unsafe ./../foo                   from                            unsafe
+test_unsafe .//../foo                  from                            unsafe
+test_unsafe ./../foo                   from/..                         unsafe
+test_unsafe ../dest                    from/dir                        safe
+test_unsafe ../../dest                 from//dir                       unsafe
+test_unsafe ..//../dest                from/dir                        unsafe
+
+test_unsafe ..                         from/file                       safe
+test_unsafe ../..                      from/file                       unsafe
+test_unsafe ..//..                     from//file                      unsafe
+test_unsafe dir/..                     from                            safe
+test_unsafe dir/../..                  from                            unsafe
+test_unsafe dir/..//..                 from                            unsafe
+
+test_unsafe ''                         from                            unsafe
 
 # Based on tests from unsafe-links by VladimĂ­r Michl
-test_unsafe ../../unsafe/unsafefile    from/safe       unsafe
-test_unsafe ../files/file1            from/safe        safe
-
-test_unsafe ../../unsafe/unsafefile    safe    unsafe
-test_unsafe ../files/file1            safe     unsafe
+test_unsafe ../../unsafe/unsafefile    from/safe                       unsafe
+test_unsafe ..//../unsafe/unsafefile   from/safe                       unsafe
+test_unsafe ../files/file1             from/safe                       safe
 
-test_unsafe ../../unsafe/unsafefile    `pwd`/from/safe safe
-test_unsafe ../files/file1            `pwd`/from/safe  safe
+test_unsafe ../../unsafe/unsafefile    safe                            unsafe
+test_unsafe ../files/file1             safe                            unsafe
 
+test_unsafe ../../unsafe/unsafefile    `pwd`/from/safe                 safe
+test_unsafe ../files/file1             `pwd`/from/safe                 safe