diff options
| author | David Bremner <david@tethera.net> | 2022-02-11 22:47:03 -0400 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2022-02-19 22:11:35 -0400 |
| commit | b320d3fb59d80b071459a0b2f28c4340ac687327 (patch) | |
| tree | f8973b6e7b59b91c40006ddcf676eebab1b4793a /notmuch-insert.c | |
| parent | 329bb4ddf4278edb14e3ff335d7547c0e0396b8e (diff) | |
CLI/insert: escape envelope from
The idea is to do as little parsing and modification of the delivered
message as possible. Luckily the position of the "envelope header"
lets us escape it by replacing the first 5 characters of the stream
with a regular header name (with ':').
Diffstat (limited to 'notmuch-insert.c')
| -rw-r--r-- | notmuch-insert.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/notmuch-insert.c b/notmuch-insert.c index 37b6f3cd..e44607ad 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -269,10 +269,13 @@ static bool copy_fd (int fdout, int fdin) { bool empty = true; + bool first = true; + const char *header = "X-Envelope-From: "; while (! interrupted) { ssize_t remain; char buf[4096]; + const char *p = buf; remain = read (fdin, buf, sizeof (buf)); if (remain == 0) @@ -284,7 +287,17 @@ copy_fd (int fdout, int fdin) strerror (errno)); return false; } - if (! write_buf (buf, fdout, remain)) + + if (first && remain >= 5 && 0 == strncmp (buf, "From ", 5)) { + if (! write_buf (header, fdout, strlen (header))) + return false; + p += 5; + remain -= 5; + } + + first = false; + + if (! write_buf (p, fdout, remain)) return false; empty = false; } |
