From: Patrick Steinhardt <ps@pks.im>
To: James Liu <james@jamesliu.io>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 09/22] builtin/rebase: fix leaking `commit.gpgsign` value
Date: Thu, 8 Aug 2024 07:05:00 +0200 [thread overview]
Message-ID: <ZrRR_EU_Ptz0hrDi@tanuki> (raw)
In-Reply-To: <D39I6DZWV40G.T5O4SNGH9OIX@jamesliu.io>
[-- Attachment #1: Type: text/plain, Size: 2956 bytes --]
On Wed, Aug 07, 2024 at 05:32:25PM +1000, James Liu wrote:
> On Tue Aug 6, 2024 at 7:00 PM AEST, Patrick Steinhardt wrote:
> > In `get_replay_opts()`, we unconditionally override the `gpg_sign` field
> > that already got populated by `sequencer_init_config()` in case the user
> > has "commit.gpgsign" set in their config. It is kind of dubious whether
> > this is the correct thing to do or a bug. What is clear though is that
> > this creates a memory leak.
> >
> > Let's mark this assignment with a TODO comment to figure out whether
> > this needs to be fixed or not. Meanwhile though, let's plug the memory
> > leak.
> >
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> > builtin/rebase.c | 8 ++++++++
> > sequencer.c | 1 +
> > t/t3404-rebase-interactive.sh | 1 +
> > t/t3435-rebase-gpg-sign.sh | 1 +
> > t/t7030-verify-tag.sh | 1 +
> > 5 files changed, 12 insertions(+)
> >
> > diff --git a/builtin/rebase.c b/builtin/rebase.c
> > index e3a8e74cfc..f65316a023 100644
> > --- a/builtin/rebase.c
> > +++ b/builtin/rebase.c
> > @@ -186,7 +186,15 @@ static struct replay_opts get_replay_opts(const struct rebase_options *opts)
> > replay.committer_date_is_author_date =
> > opts->committer_date_is_author_date;
> > replay.ignore_date = opts->ignore_date;
> > +
> > + /*
> > + * TODO: Is it really intentional that we unconditionally override
> > + * `replay.gpg_sign` even if it has already been initialized via the
> > + * configuration?
> > + */
> > + free(replay.gpg_sign);
> > replay.gpg_sign = xstrdup_or_null(opts->gpg_sign_opt);
> > +
> > replay.reflog_action = xstrdup(opts->reflog_action);
> > if (opts->strategy)
> > replay.strategy = xstrdup_or_null(opts->strategy);
> > diff --git a/sequencer.c b/sequencer.c
> > index 0291920f0b..cade9b0ca8 100644
> > --- a/sequencer.c
> > +++ b/sequencer.c
> > @@ -303,6 +303,7 @@ static int git_sequencer_config(const char *k, const char *v,
> > }
> >
> > if (!strcmp(k, "commit.gpgsign")) {
> > + free(opts->gpg_sign);
> > opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
> > return 0;
> > }
>
> It looks like this free'ing would be managed by the caller by invoking
> `replay_opts_release()`, but it's not being done consistently.
>
> For example, `do_interactive_rebase()` invokes `replay_opts_release()`,
> but `run_sequencer_rebase()` does not. Would it be better to address the
> leak here?
The problem here isn't that `replay_opts_release()` doesn't free the
values, or that the function isn't called consistently. The problem
rather is that we assign `opts->gpg_sign` even though it may already be
assigned an allocated string. Consequently, `replay_opts_release()`
doesn't even have a chance to free the old value because it cannot see
it anymore.
I'll massage the commit message a bit to clarify this.
Patrick
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2024-08-08 5:05 UTC|newest]
Thread overview: 146+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-06 8:59 [PATCH 00/22] Memory leak fixes (pt.4) Patrick Steinhardt
2024-08-06 8:59 ` [PATCH 01/22] remote: plug memory leak when aliasing URLs Patrick Steinhardt
2024-08-06 8:59 ` [PATCH 02/22] git: fix leaking system paths Patrick Steinhardt
2024-08-07 4:02 ` James Liu
2024-08-06 8:59 ` [PATCH 03/22] object-file: fix memory leak when reading corrupted headers Patrick Steinhardt
2024-08-06 8:59 ` [PATCH 04/22] object-name: fix leaking symlink paths in object context Patrick Steinhardt
2024-08-06 8:59 ` [PATCH 05/22] bulk-checkin: fix leaking state TODO Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 06/22] read-cache: fix leaking hashfile when writing index fails Patrick Steinhardt
2024-08-07 7:01 ` James Liu
2024-08-08 5:04 ` Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 07/22] submodule-config: fix leaking name enrty when traversing submodules Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 08/22] config: fix leaking comment character config Patrick Steinhardt
2024-08-07 7:11 ` James Liu
2024-08-08 5:04 ` Patrick Steinhardt
2024-08-08 15:54 ` Junio C Hamano
2024-08-06 9:00 ` [PATCH 09/22] builtin/rebase: fix leaking `commit.gpgsign` value Patrick Steinhardt
2024-08-07 7:32 ` James Liu
2024-08-08 5:05 ` Patrick Steinhardt [this message]
2024-08-08 10:07 ` Phillip Wood
2024-08-08 12:58 ` Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 10/22] builtin/notes: fix leaking `struct notes_tree` when merging notes Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 11/22] builtin/fast-import: plug trivial memory leaks Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 12/22] builtin/fast-export: fix leaking diff options Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 13/22] builtin/fast-export: plug leaking tag names Patrick Steinhardt
2024-08-07 8:31 ` James Liu
2024-08-08 5:05 ` Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 14/22] merge-ort: unconditionally release attributes index Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 15/22] sequencer: release todo list on error paths Patrick Steinhardt
2024-08-08 10:08 ` Phillip Wood
2024-08-08 16:31 ` Junio C Hamano
2024-08-06 9:00 ` [PATCH 16/22] unpack-trees: clear index when not propagating it Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 17/22] diff: fix leak when parsing invalid ignore regex option Patrick Steinhardt
2024-08-06 9:00 ` [PATCH 18/22] builtin/format-patch: fix various trivial memory leaks Patrick Steinhardt
2024-08-07 8:51 ` James Liu
2024-08-08 5:05 ` Patrick Steinhardt
2024-08-06 9:01 ` [PATCH 19/22] userdiff: fix leaking memory for configured diff drivers Patrick Steinhardt
2024-08-07 9:25 ` James Liu
2024-08-08 5:05 ` Patrick Steinhardt
2024-08-08 16:05 ` Junio C Hamano
2024-08-06 9:01 ` [PATCH 20/22] builtin/log: fix leak when showing converted blob contents Patrick Steinhardt
2024-08-06 9:01 ` [PATCH 21/22] diff: free state populated via options Patrick Steinhardt
2024-08-06 9:01 ` [PATCH 22/22] builtin/diff: free symmetric diff members Patrick Steinhardt
2024-08-07 9:27 ` [PATCH 00/22] Memory leak fixes (pt.4) James Liu
2024-08-08 5:05 ` Patrick Steinhardt
2024-08-08 6:00 ` James Liu
2024-08-07 16:59 ` Junio C Hamano
2024-08-07 17:03 ` Patrick Steinhardt
2024-08-08 0:32 ` Junio C Hamano
2024-08-08 13:04 ` [PATCH v2 " Patrick Steinhardt
2024-08-08 13:04 ` [PATCH v2 01/22] remote: plug memory leak when aliasing URLs Patrick Steinhardt
2024-08-12 8:27 ` karthik nayak
2024-08-12 14:08 ` Taylor Blau
2024-08-12 14:37 ` Jeff King
2024-08-13 6:34 ` Patrick Steinhardt
2024-08-08 13:04 ` [PATCH v2 02/22] git: fix leaking system paths Patrick Steinhardt
2024-08-12 14:11 ` Taylor Blau
2024-08-13 6:30 ` Patrick Steinhardt
2024-08-13 16:02 ` Junio C Hamano
2024-08-08 13:04 ` [PATCH v2 03/22] object-file: fix memory leak when reading corrupted headers Patrick Steinhardt
2024-08-12 8:43 ` karthik nayak
2024-08-08 13:04 ` [PATCH v2 04/22] object-name: fix leaking symlink paths in object context Patrick Steinhardt
2024-08-08 13:04 ` [PATCH v2 05/22] bulk-checkin: fix leaking state TODO Patrick Steinhardt
2024-08-08 13:04 ` [PATCH v2 06/22] read-cache: fix leaking hashfile when writing index fails Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 07/22] submodule-config: fix leaking name enrty when traversing submodules Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 08/22] config: fix leaking comment character config Patrick Steinhardt
2024-08-08 17:12 ` Junio C Hamano
2024-08-12 7:45 ` Patrick Steinhardt
2024-08-12 20:32 ` Junio C Hamano
2024-08-13 6:54 ` Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 09/22] builtin/rebase: fix leaking `commit.gpgsign` value Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 10/22] builtin/notes: fix leaking `struct notes_tree` when merging notes Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 11/22] builtin/fast-import: plug trivial memory leaks Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 12/22] builtin/fast-export: fix leaking diff options Patrick Steinhardt
2024-08-12 9:05 ` karthik nayak
2024-08-08 13:05 ` [PATCH v2 13/22] builtin/fast-export: plug leaking tag names Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 14/22] merge-ort: unconditionally release attributes index Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 15/22] sequencer: release todo list on error paths Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 16/22] unpack-trees: clear index when not propagating it Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 17/22] diff: fix leak when parsing invalid ignore regex option Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 18/22] builtin/format-patch: fix various trivial memory leaks Patrick Steinhardt
2024-08-08 13:05 ` [PATCH v2 19/22] userdiff: fix leaking memory for configured diff drivers Patrick Steinhardt
2024-08-08 13:06 ` [PATCH v2 20/22] builtin/log: fix leak when showing converted blob contents Patrick Steinhardt
2024-08-08 13:06 ` [PATCH v2 21/22] diff: free state populated via options Patrick Steinhardt
2024-08-08 13:06 ` [PATCH v2 22/22] builtin/diff: free symmetric diff members Patrick Steinhardt
2024-08-12 9:12 ` karthik nayak
2024-08-12 9:13 ` [PATCH v2 00/22] Memory leak fixes (pt.4) karthik nayak
2024-08-12 15:49 ` Junio C Hamano
2024-08-13 6:27 ` Patrick Steinhardt
2024-08-12 14:01 ` Phillip Wood
2024-08-12 15:50 ` Junio C Hamano
2024-08-13 9:31 ` [PATCH v3 " Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 01/22] remote: plug memory leak when aliasing URLs Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 02/22] git: fix leaking system paths Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 03/22] object-file: fix memory leak when reading corrupted headers Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 04/22] object-name: fix leaking symlink paths in object context Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 05/22] bulk-checkin: fix leaking state TODO Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 06/22] read-cache: fix leaking hashfile when writing index fails Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 07/22] submodule-config: fix leaking name entry when traversing submodules Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 08/22] config: fix leaking comment character config Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 09/22] builtin/rebase: fix leaking `commit.gpgsign` value Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 10/22] builtin/notes: fix leaking `struct notes_tree` when merging notes Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 11/22] builtin/fast-import: plug trivial memory leaks Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 12/22] builtin/fast-export: fix leaking diff options Patrick Steinhardt
2024-08-13 16:34 ` Junio C Hamano
2024-08-14 4:49 ` Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 13/22] builtin/fast-export: plug leaking tag names Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 14/22] merge-ort: unconditionally release attributes index Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 15/22] sequencer: release todo list on error paths Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 16/22] unpack-trees: clear index when not propagating it Patrick Steinhardt
2024-08-13 9:31 ` [PATCH v3 17/22] diff: fix leak when parsing invalid ignore regex option Patrick Steinhardt
2024-08-13 9:32 ` [PATCH v3 18/22] builtin/format-patch: fix various trivial memory leaks Patrick Steinhardt
2024-08-13 16:55 ` Junio C Hamano
2024-08-14 4:56 ` Patrick Steinhardt
2024-08-13 16:55 ` Junio C Hamano
2024-08-13 9:32 ` [PATCH v3 19/22] userdiff: fix leaking memory for configured diff drivers Patrick Steinhardt
2024-08-13 9:32 ` [PATCH v3 20/22] builtin/log: fix leak when showing converted blob contents Patrick Steinhardt
2024-08-13 9:32 ` [PATCH v3 21/22] diff: free state populated via options Patrick Steinhardt
2024-08-13 16:31 ` Junio C Hamano
2024-08-13 9:32 ` [PATCH v3 22/22] builtin/diff: free symmetric diff members Patrick Steinhardt
2024-08-13 16:25 ` Junio C Hamano
2024-08-14 5:01 ` Patrick Steinhardt
2024-08-14 15:28 ` Junio C Hamano
2024-08-13 16:58 ` [PATCH v3 00/22] Memory leak fixes (pt.4) Junio C Hamano
2024-08-14 6:51 ` [PATCH v4 " Patrick Steinhardt
2024-08-14 6:51 ` [PATCH v4 01/22] remote: plug memory leak when aliasing URLs Patrick Steinhardt
2024-08-14 6:51 ` [PATCH v4 02/22] git: fix leaking system paths Patrick Steinhardt
2024-08-14 6:51 ` [PATCH v4 03/22] object-file: fix memory leak when reading corrupted headers Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 04/22] object-name: fix leaking symlink paths in object context Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 05/22] bulk-checkin: fix leaking state TODO Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 06/22] read-cache: fix leaking hashfile when writing index fails Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 07/22] submodule-config: fix leaking name entry when traversing submodules Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 08/22] config: fix leaking comment character config Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 09/22] builtin/rebase: fix leaking `commit.gpgsign` value Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 10/22] builtin/notes: fix leaking `struct notes_tree` when merging notes Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 11/22] builtin/fast-import: plug trivial memory leaks Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 12/22] builtin/fast-export: fix leaking diff options Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 13/22] builtin/fast-export: plug leaking tag names Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 14/22] merge-ort: unconditionally release attributes index Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 15/22] sequencer: release todo list on error paths Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 16/22] unpack-trees: clear index when not propagating it Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 17/22] diff: fix leak when parsing invalid ignore regex option Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 18/22] builtin/format-patch: fix various trivial memory leaks Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 19/22] userdiff: fix leaking memory for configured diff drivers Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 20/22] builtin/log: fix leak when showing converted blob contents Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 21/22] diff: free state populated via options Patrick Steinhardt
2024-08-14 6:52 ` [PATCH v4 22/22] builtin/diff: free symmetric diff members Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZrRR_EU_Ptz0hrDi@tanuki \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=james@jamesliu.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).