From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Patrick Steinhardt <ps@pks.im>,
Harald Nordgren <haraldnordgren@gmail.com>,
Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH v3 1/4] imap-send: wait for the tunnel command to finish
Date: Thu, 22 Oct 2026 06:56:22 +0000 [thread overview]
Message-ID: <0f446c3c12aa5963259fed2617da51c31b992321.1792652185.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2456.v3.git.git.1792652185.gitgitgadget@gmail.com>
From: Harald Nordgren <haraldnordgren@gmail.com>
When imap.tunnel is set, git imap-send starts the tunnel command but
never waits for it to exit, and leaks the argument list it was started
with. The isync code that imap-send was derived from forked the tunnel
without ever reaping it, and c94d2dd080 (imap-send: use run-command
API for tunneling, 2009-10-19) carried that over.
Wait for the tunnel when closing the connection. By then imap-send has
closed its end of the pipes, so the tunnel sees the end of its input
and exits. No test sets imap.tunnel, so the leak checker has not
caught this.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
---
imap-send.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/imap-send.c b/imap-send.c
index bf1d2cf74d..fa326c4ae2 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -118,6 +118,7 @@ struct imap {
/* command queue */
int nexttag, num_in_progress, literal_pending;
struct imap_cmd *in_progress, **in_progress_append;
+ struct child_process tunnel;
struct imap_buffer buf; /* this is BIG, so put it last */
};
@@ -858,6 +859,8 @@ static void imap_close_server(struct imap_store *ictx)
imap_exec(ictx, NULL, "LOGOUT");
socket_shutdown(&imap->buf.sock);
}
+ if (ictx->cfg->tunnel)
+ finish_command(&imap->tunnel);
free(imap);
}
@@ -1163,19 +1166,20 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, const c
/* open connection to IMAP server */
if (srvc->tunnel) {
- struct child_process tunnel = CHILD_PROCESS_INIT;
+ struct child_process *tunnel = &imap->tunnel;
imap_info("Starting tunnel '%s'... ", srvc->tunnel);
- strvec_push(&tunnel.args, srvc->tunnel);
- tunnel.use_shell = 1;
- tunnel.in = -1;
- tunnel.out = -1;
- if (start_command(&tunnel))
+ child_process_init(tunnel);
+ strvec_push(&tunnel->args, srvc->tunnel);
+ tunnel->use_shell = 1;
+ tunnel->in = -1;
+ tunnel->out = -1;
+ if (start_command(tunnel))
die("cannot start proxy %s", srvc->tunnel);
- imap->buf.sock.fd[0] = tunnel.out;
- imap->buf.sock.fd[1] = tunnel.in;
+ imap->buf.sock.fd[0] = tunnel->out;
+ imap->buf.sock.fd[1] = tunnel->in;
imap_info("OK\n");
} else {
--
gitgitgadget
next prev parent reply other threads:[~2026-10-22 6:56 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 19:19 [PATCH 0/2] Fix imap-send with reordered message headers Harald Nordgren via GitGitGadget
2026-10-19 19:19 ` [PATCH 1/2] imap-send: avoid leaking the tunnel command Harald Nordgren via GitGitGadget
2026-10-19 19:19 ` [PATCH 2/2] imap-send: accept messages with Subject before Date Harald Nordgren via GitGitGadget
2026-10-19 22:00 ` Junio C Hamano
2026-10-20 7:28 ` Harald Nordgren
2026-10-21 7:07 ` [PATCH v2 0/2] Fix imap-send with reordered message headers Harald Nordgren via GitGitGadget
2026-10-21 7:07 ` [PATCH v2 1/2] imap-send: avoid leaking the tunnel command Harald Nordgren via GitGitGadget
2026-10-21 8:24 ` Patrick Steinhardt
2026-10-21 8:53 ` Harald Nordgren
2026-10-21 7:07 ` [PATCH v2 2/2] imap-send: accept messages with Subject before Date Harald Nordgren via GitGitGadget
2026-10-21 8:25 ` Patrick Steinhardt
2026-10-21 8:45 ` Harald Nordgren
2026-10-21 9:36 ` Patrick Steinhardt
2026-10-21 9:59 ` Harald Nordgren
2026-10-22 6:56 ` [PATCH v3 0/4] Fix imap-send with reordered message headers Harald Nordgren via GitGitGadget
2026-10-22 6:56 ` Harald Nordgren via GitGitGadget [this message]
2026-10-22 6:56 ` [PATCH v3 2/4] imap-send: accept messages with Subject before Date Harald Nordgren via GitGitGadget
2026-10-22 6:56 ` [PATCH v3 3/4] imap-send: check git send-email copies like other messages Harald Nordgren via GitGitGadget
2026-10-22 6:56 ` [PATCH v3 4/4] imap-send: match header names case insensitively Harald Nordgren via GitGitGadget
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=0f446c3c12aa5963259fed2617da51c31b992321.1792652185.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=haraldnordgren@gmail.com \
--cc=ps@pks.im \
/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