Fix the val reading for MSG_ERROR_EXIT. Use 0-length MSG_DATA when
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index a2bf010..dec59f4 100644 (file)
--- a/main.c
+++ b/main.c
@@ -395,7 +395,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                    int *f_in_p, int *f_out_p)
 {
        int i, argc = 0;
-       char *args[MAX_ARGS];
+       char *args[MAX_ARGS], *need_to_free = NULL;
        pid_t pid;
        int dash_l_set = 0;
 
@@ -406,7 +406,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                        cmd = rsh_env;
                if (!cmd)
                        cmd = RSYNC_RSH;
-               cmd = strdup(cmd); /*MEMORY LEAK*/
+               cmd = need_to_free = strdup(cmd);
                if (!cmd)
                        goto oom;
 
@@ -538,6 +538,9 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                        send_protected_args(*f_out_p, args);
        }
 
+       if (need_to_free)
+               free(need_to_free);
+
        return pid;
 
   oom:
@@ -1364,7 +1367,7 @@ static int start_client(int argc, char *argv[])
        if (DEBUG_GTE(CMD, 2)) {
                rprintf(FINFO,"cmd=%s machine=%s user=%s path=%s\n",
                        NS(shell_cmd), NS(shell_machine), NS(shell_user),
-                       remote_argv ? NS(remote_argv[0]) : "");
+                       NS(remote_argv[0]));
        }
 
        pid = do_cmd(shell_cmd, shell_machine, shell_user, remote_argv, remote_argc,