In parse_arguments when --protect-args is encountered the function exits
early. The caller is expected to check protect_args, and recall
parse_arguments setting protect_args to 2. This patch prevents the
client from resetting protect_args during the second pass of
parse_arguments. This prevents parse_arguments returning early the
second time before it's able to sanitize the arguments it received.
const char *arg, **argv = *argv_p;
int argc = *argc_p;
int opt;
+ int orig_protect_args = protect_args;
if (ref && *ref)
set_refuse_options(ref);
if (fuzzy_basis > 1)
fuzzy_basis = basis_dir_cnt + 1;
+ /* Don't let the client reset protect_args if it was already processed */
+ if (orig_protect_args == 2 && am_server)
+ protect_args = orig_protect_args;
+
if (protect_args == 1 && am_server)
return 1;