Avoid recursing into . and .. when in -r mode
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 30 Nov 1999 11:53:42 +0000 (11:53 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 30 Nov 1999 11:53:42 +0000 (11:53 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/putty@332 cda61777-01e9-0310-a592-d414129be87e

scp.c

diff --git a/scp.c b/scp.c
index 299f6fd..ac232fa 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -277,10 +277,25 @@ static void source(char *src)
     }
 
     if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
-       if (recursive)
-           rsource(src);
-       else
+       if (recursive) {
+            /*
+             * Avoid . and .. directories.
+             */
+            char *p;
+            p = strrchr(src, '/');
+            if (!p)
+                p = strrchr(src, '\\');
+            if (!p)
+                p = src;
+            else
+                p++;
+            if (!strcmp(p, ".") || !strcmp(p, ".."))
+                /* skip . and .. */;
+            else
+                rsource(src);
+        } else {
            run_err("%s: not a regular file", src);
+        }
        return;
     }