X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/887e553f0503e45e5273b5c1d7fa71d5554bc542..9774cc334494e12bd35197e7e1ab9fd6b0ef3023:/main.c diff --git a/main.c b/main.c index fbc5030b..0ec6dee2 100644 --- a/main.c +++ b/main.c @@ -49,6 +49,7 @@ extern int protocol_version; extern int recurse; extern int relative_paths; extern int rsync_port; +extern int whole_file; extern int read_batch; extern int write_batch; extern int filesfrom_fd; @@ -235,8 +236,9 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char *path, goto oom; for (tok = strtok(cmd, " "); tok; tok = strtok(NULL, " ")) { - if (argc >= MAX_ARGS) { - rprintf(FERROR, "Command is too long\n"); + /* Comparison leaves rooms for server_options(). */ + if (argc >= MAX_ARGS - 100) { + rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n"); exit_cleanup(RERR_SYNTAX); } args[argc++] = tok; @@ -277,6 +279,11 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char *path, } server_options(args,&argc); + + if (argc >= MAX_ARGS - 2) { + rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n"); + exit_cleanup(RERR_SYNTAX); + } } args[argc++] = "."; @@ -284,16 +291,11 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char *path, if (!daemon_over_rsh && path && *path) args[argc++] = path; - if (argc >= (int)(sizeof args / sizeof args[0])) { - rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n"); - exit_cleanup(RERR_MALLOC); /* XXX Need better RERR? */ - } - args[argc] = NULL; if (verbose > 3) { rprintf(FINFO,"cmd="); - for (i=0;i