The sequencer reads options from disk and stores them in its struct
for use during sequencer's operations.

With this patch, the memory is released afterwards, plugging a
memory leak.

Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 sequencer.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index 8d56a05..3ca231f 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -131,6 +131,8 @@ static void remove_sequencer_state(const struct replay_opts 
*opts)
                free(opts->owned[i]);
        free(opts->owned);
 
+       free(opts->xopts);
+
        strbuf_addf(&dir, "%s", get_dir(opts));
        remove_dir_recursively(&dir, 0);
        strbuf_release(&dir);
@@ -815,13 +817,18 @@ static int populate_opts_cb(const char *key, const char 
*value, void *data)
                opts->allow_ff = git_config_bool_or_int(key, value, 
&error_flag);
        else if (!strcmp(key, "options.mainline"))
                opts->mainline = git_config_int(key, value);
-       else if (!strcmp(key, "options.strategy"))
+       else if (!strcmp(key, "options.strategy")) {
                git_config_string(&opts->strategy, key, value);
-       else if (!strcmp(key, "options.gpg-sign"))
+               sequencer_entrust(opts, (char *) opts->strategy);
+       }
+       else if (!strcmp(key, "options.gpg-sign")) {
                git_config_string(&opts->gpg_sign, key, value);
+               sequencer_entrust(opts, (char *) opts->gpg_sign);
+       }
        else if (!strcmp(key, "options.strategy-option")) {
                ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
-               opts->xopts[opts->xopts_nr++] = xstrdup(value);
+               opts->xopts[opts->xopts_nr++] =
+                       sequencer_entrust(opts, xstrdup(value));
        } else
                return error(_("Invalid key: %s"), key);
 
-- 
2.10.0.windows.1.10.g803177d


Reply via email to