From: David Bremner Date: Sat, 12 Feb 2022 02:47:03 +0000 (-0400) Subject: CLI/insert: escape envelope from X-Git-Tag: archive/debian/0.36_rc0-1~32 X-Git-Url: https://git.cworth.org/git?p=notmuch;a=commitdiff_plain;h=b320d3fb59d80b071459a0b2f28c4340ac687327;hp=329bb4ddf4278edb14e3ff335d7547c0e0396b8e 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 ':'). --- 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; } diff --git a/test/T070-insert.sh b/test/T070-insert.sh index a297fa73..e1e3b151 100755 --- a/test/T070-insert.sh +++ b/test/T070-insert.sh @@ -293,7 +293,6 @@ for code in OUT_OF_MEMORY XAPIAN_EXCEPTION ; do done test_begin_subtest "insert converts mboxes on delivery" -test_subtest_known_broken notmuch insert +unmboxed < "${TEST_DIRECTORY}"/corpora/indexing/mbox-attachment.eml output=$(notmuch count tag:unmboxed) test_expect_equal "${output}" 1