From: Wayne Davison Date: Thu, 23 Dec 2010 17:26:39 +0000 (-0800) Subject: Protect a remote filename that starts with a dash. X-Git-Tag: v3.1.0pre1~176 X-Git-Url: http://git.samba.org/samba.git/?p=rsync.git;a=commitdiff_plain;h=8f30d215843a58e159335158dd2e060560479b60 Protect a remote filename that starts with a dash. --- diff --git a/clientserver.c b/clientserver.c index afd2b179..21ef01c5 100644 --- a/clientserver.c +++ b/clientserver.c @@ -265,7 +265,10 @@ int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char if (strncmp(*argv, modname, modlen) == 0 && argv[0][modlen] == '\0') sargs[sargc++] = modname; /* we send "modname/" */ - else + else if (**argv == '-') { + if (asprintf(sargs + sargc++, "./%s", *argv) < 0) + out_of_memory("start_inband_exchange"); + } else sargs[sargc++] = *argv; argv++; argc--; diff --git a/main.c b/main.c index 161bfad8..649aa904 100644 --- a/main.c +++ b/main.c @@ -493,7 +493,11 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n"); exit_cleanup(RERR_SYNTAX); } - args[argc++] = *remote_argv++; + if (**remote_argv == '-') { + if (asprintf(args + argc++, "./%s", *remote_argv++) < 0) + out_of_memory("do_cmd"); + } else + args[argc++] = *remote_argv++; remote_argc--; } }