On 11/29/2012 10:33 PM, Junio C Hamano wrote: > Michael Haggerty <mhagger@xxxxxxxxxxxx> writes: > >> Now that we can xml-quote an arbitrary string in O(N), there is no >> reason to process the message line by line. This change saves lots of >> memory allocations and copying. >> >> The old code would have created invalid output for a malformed input >> message (one that does not contain a blank line separating the header >> from the body). The new code die()s in this situation. > > Given that imap-send is about sending a patch the distinction would > not matter in practice, but isn't the difference between the two > that the new version would not allow sending a header-only message > without a body, while the old one allowed it? I was thinking that the end-of-header line is a required part of an RFC2282 email message, but I was wrong. If you squash the attached patch onto this commit, it will handle emails without bodies correctly. Nevertheless, the old code was even *more* broken because it added a "</pre>" regardless of whether the separator line had been seen, and therefore a message without an end-of-header line would come out like Header1: foo Header2: bar </pre> with no content_type line, no pre_open, and </pre> appended to the header without a blank line in between. This is the "invalid output" that I was referring to. Michael -- Michael Haggerty mhagger@xxxxxxxxxxxx http://softwareswirl.blogspot.com/
diff --git a/imap-send.c b/imap-send.c index eec9e35..e521e2f 100644 --- a/imap-send.c +++ b/imap-send.c @@ -1348,7 +1348,7 @@ static void wrap_in_html(struct strbuf *msg) const char *body = strstr(msg->buf, "\n\n"); if (!body) - die("malformed message"); + return; /* Headers but no body; no wrapping needed */ body += 2;