[9front] upas/vf: exclude mime boundary from temporary attachment files
validateattachment has no business with the mime boundary; it is not part of the attachment itself. Also, it causes the boundary to be dropped in the message output from upas/vf, effectively dropping the following attachment (though the content is still present after the last boundary of the wrapped first attachment part). Consider the following sequence of events: 1. upas/vf is run on a message containing two attachments. 2. The first attachment does not have a known extension, so is saved to a temporary file *including* the following mime boundary. 3. This file is opened as p->tmpbuf, which is used for subsequent reads until switching back to stdin. 4. The attachment fails validateattachment, so upas/vf wraps it in a multipart with a warning message. 5. problemchild() calls passbody(p, 0), which copies from p->tmpbuf until it hits the outer boundary line, which it excludes, seeks back one line, then returns the outer multipart. 6. problemchild() then writes its own boundary, and then copies one line from *stdin* to stdout, expecting the outer boundary. However, this boundary was already read from stdin in 2, so it ends up reading the first line of the subsequent part instead. To fix this, pass 0 to passbody() in save() to exclude it from the attachment file and make it available in stdin when expected.
This commit is contained in:
parent
2d8adc7b88
commit
29fbba7b6d
1 changed files with 1 additions and 1 deletions
|
@ -387,7 +387,7 @@ save(Part *p, char *file)
|
|||
Bprint(&out, "From virusfilter %τ\n", thedate(&tm));
|
||||
writeheader(p, 0);
|
||||
bodyoff = Boffset(&out);
|
||||
passbody(p, 1);
|
||||
passbody(p, 0);
|
||||
Bprint(&out, "\n");
|
||||
Bterm(&out);
|
||||
close(fd);
|
||||
|
|
Loading…
Reference in a new issue