builtin/pull: fix leaking "ff" option
The `opt_ff` field gets populated either via `OPT_PASSTHRU` via `config_get_ff()` or when `--rebase` is passed. So we sometimes end up overriding the value in `opt_ff` with another value, but we do not free the old value, causing a memory leak. Adapt the type of the variable to be `char *` and consistently assign allocated strings to it such that we can easily free it when it is being overridden. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
04ff8008f3
commit
49af1b7722
@ -84,7 +84,7 @@ static const char *opt_squash;
|
||||
static const char *opt_commit;
|
||||
static const char *opt_edit;
|
||||
static const char *cleanup_arg;
|
||||
static const char *opt_ff;
|
||||
static char *opt_ff;
|
||||
static const char *opt_verify_signatures;
|
||||
static const char *opt_verify;
|
||||
static int opt_autostash = -1;
|
||||
@ -1024,8 +1024,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
|
||||
* "--rebase" can override a config setting of
|
||||
* pull.ff=only.
|
||||
*/
|
||||
if (opt_rebase >= 0 && opt_ff && !strcmp(opt_ff, "--ff-only"))
|
||||
opt_ff = "--ff";
|
||||
if (opt_rebase >= 0 && opt_ff && !strcmp(opt_ff, "--ff-only")) {
|
||||
free(opt_ff);
|
||||
opt_ff = xstrdup("--ff");
|
||||
}
|
||||
}
|
||||
|
||||
if (opt_rebase < 0)
|
||||
@ -1135,7 +1137,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (can_ff) {
|
||||
/* we can fast-forward this without invoking rebase */
|
||||
opt_ff = "--ff-only";
|
||||
free(opt_ff);
|
||||
opt_ff = xstrdup("--ff-only");
|
||||
ret = run_merge();
|
||||
} else {
|
||||
ret = run_rebase(&newbase, &upstream);
|
||||
|
Reference in New Issue
Block a user